一 .tf.variable() 在模型中每次调用都会重建变量,使其存储相同变量而消耗内存,如:

def repeat_value():

  weight=tf.variable(tf.random_normal([5,5,6]),name='weight')

  return weight

如果多次调用函数如:

result1=repeat_value()

result2=repeat_value() # 重复调用

将会重复创建一份变量,却保存相同模型参数。若使用字典可以解决此类问题,却破坏模型封装性(有关字典解决此问题,可留言回复)。

二 . tf.get_variable()与tf.variable_scope()方法可以解决上面问题,其中前者负责创建或获取指定名称的变量,后者负责传入tf.get_variable()方法的变量名称的名字空间。

def a(input,kernel_shape):
w=tf.get_variable('w',kernel_shape,initializer=tf.random_normal()) #创建获取名叫w的变量
conv=tf.nn.conv2d(input,w,strides=[1,1,1,1],padding='SAME')
return conv def b(img):
with tf.variable_scope("conv1"): #创建conv1/w变量
r1=a(img,[5,5,32,32])
with tf.variable_scope("conv2"): #创建conv2/w变量
r2=a(r1,[5,5,32,32])
return r2
# with上下文中定义的变量都会加上tf.variable_scope方法中定义的前缀,这样能够通过不同的变量作用域区分同类网络的不同参数。
# 但第二次调用函数b(),tf.get_variable()就会抛出变量已存在,无法解决复用问题。因此,需要加上reuse=True,如下: def b(img):
with tf.variable_scope("conv1",reuse=True): #创建conv1/w变量
r1=a(img,[5,5,32,32])
with tf.variable_scope("conv2",reuse=True): #创建conv2/w变量
r2=a(r1,[5,5,32,32])
return r2
# 更改后可以反复调用了。 三.共享作用域下的初始化(类似c++类中的继承):
with tf.variable_scope("conv1",initializer=tf.constant_initializer(0.8)): #创建conv1/w变量
w=tf.get_variable('w',[1]) #此处使用外围的initializer=tf.constant_initializer(0.8)初始化
w1 = tf.get_variable('w1', [1,2], initializer=tf.random_normal()) # 此处覆盖initializer=tf.constant_initializer(0.8)初始化,
# 使用本身initializer=tf.random_normal()初始化。 with tf.variable_scope("conv2"): #嵌套conv1下的作用域
w2 = tf.get_variable('w2', [1,2]) #此处使用外围的initializer=tf.constant_initializer(0.8)初始化(类似继承)
w1 = tf.get_variable('w1', [1,2], tf.constant_initializer(0.4)) # 此处覆盖initializer=tf.constant_initializer(0.8)初始化,
# 使用本身tf.constant_initializer(0.4)初始化。

tensorflow中使用变量作用域及tf.variable(),tf,getvariable()与tf.variable_scope()的用法的更多相关文章

  1. TensorFlow中的变量和常量

    1.TensorFlow中的变量和常量介绍 TensorFlow中的变量: import tensorflow as tf state = tf.Variable(0,name='counter') ...

  2. 深度学习原理与框架-Tensorflow基本操作-Tensorflow中的变量

    1.tf.Variable([[1, 2]])  # 创建一个变量 参数说明:[[1, 2]] 表示输入的数据,为一行二列的数据 2.tf.global_variables_initializer() ...

  3. Tensorflow中的变量

    从初识tf开始,变量这个名词就一直都很重要,因为深度模型往往所要获得的就是通过参数和函数对某一或某些具体事物的抽象表达.而那些未知的数据需要通过学习而获得,在学习的过程中它们不断变化着,最终收敛达到较 ...

  4. 2、Tensorflow中的变量

    2.Tensorflow中的变量注意:tf中使用 变量必须先初始化下面是一个使用变量的TF代码(含注释): # __author__ = "WSX" import tensorfl ...

  5. 83、Tensorflow中的变量管理

    ''' Created on Apr 21, 2017 @author: P0079482 ''' #如何通过tf.variable_scope函数来控制tf.ger_variable函数获取已经创建 ...

  6. TensorFlow中的变量命名以及命名空间.

    What: 在Tensorflow中, 为了区别不同的变量(例如TensorBoard显示中), 会需要命名空间对不同的变量进行命名. 其中常用的两个函数为: tf.variable_scope, t ...

  7. javascript中的变量作用域以及变量提升

    在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解. 变量作用域 “一个变量的作用域表示这个变量存在的上 ...

  8. php学习笔记4--php中的变量作用域

    变量作用域:可以简单地理解为变量的可见区域,变量能被访问的范围.如同其他语言,php中也有全局作用域和局部作用域之分,但是不同的是:php中的全局作用域指的是:只能在函数外部使用,而局部作用域指的是: ...

  9. javascript中的变量作用域以及变量提升详细介绍

    在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解变量作用域 “一个变量的作用域表示这个变量存在的上下文 ...

随机推荐

  1. Android架构师吐槽腾讯王者荣耀的程序员,排位匹配算法怎么搞的,每次都输

    腾讯王者荣耀的开发来来来出来聊聊,真是日了狗了,多次离上王者还差两三颗星的时候队友就开始水的一塌糊涂,对面就牛逼的不行. 又连跪回去了,被对面把屎都打出来了,实在忍不住来吐槽,你们这个排位匹配算法到底 ...

  2. isaster(Comet OJ - Contest #11D题+kruskal重构树+线段树+倍增)

    目录 题目链接 思路 代码 题目链接 传送门 思路 \(kruskal\)重构树\(+\)线段树\(+\)倍增 代码 #include <set> #include <map> ...

  3. MySql日期格式化(format)取值范围

  4. windows 运行库与dll文件

    Windows 10包含版本 win10家庭版win10专业版win10教育版win 10企业版 Windows 7包含6个版本分别为Windows 7 Starter(初级版)Windows 7 H ...

  5. sublime python 配置内容

    {"cmd": ["python", "-u", "$file"],"file_regex": &q ...

  6. Cantor表-(模拟)

    链接:https://ac.nowcoder.com/acm/contest/1069/I来源:牛客网 题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一 ...

  7. 实现:笑脸_Crack

    直接载入OD,观察发现弹窗可能为MessageBox,那么进行对windows api函数的搜索 跟进反汇编窗口跟随函数,来到这里,直接进行断点操作 运行程序,跑到断点处,如下图 接着发现堆栈窗口有调 ...

  8. PATA1028 List Sorting

    Excel can sort records according to any column. Now you are supposed to imitate this function. Input ...

  9. 项目中常用的js方法封装---自留

    1.输入一个值,返回其数据类型 type = para => { return Object.prototype.toString.call(para).slice(8,-1) } 2.冒泡排序 ...

  10. 接口自动化框架2-升级版(Pytest+request+Allure)

    前言: 接口自动化是指模拟程序接口层面的自动化,由于接口不易变更,维护成本更小,所以深受各大公司的喜爱. 第一版入口:接口自动化框架(Pytest+request+Allure) 本次版本做了一些升级 ...