TensorFlow创建变量
1 使用tf.Variable函数创建变量
tf.Variable(initial_value=None,trainable=True,collections=None,validate_shape=True,caching_device=None,name=None,variable_def=None,dtype=None,expected_shape=None,import_scope=None)
函数功能:
创建一个新的变量,变量的值是initial_value,创建的变量会被添加到[GraphKeys.GLOBAL_VARIABLES]默认的计算图列表中,如果trainable被设置为True,这个变量还会被添加到GraphKeys.TRAINABLE_VARIABLES计算图的集合中。
参数:
- initial_value:默认值是None,张量或者是一个python对象可以转成张量,这个initial_value是初始化变量的值。它必须有一个特殊的shape,除非validate_shape设置为False。
- trainable:默认的是True,变量还会被添加到GraphKeys.TRAINABLE_VARIABLES计算图集合中。
- collections:变量会被添加到这个集合中,默认的集合是[GraphKeys.GLOBAL_VARIABLES]。
- validate_shape:如果是False,允许这个变量被初始化一个不知道shape。默认的是True,这个initial_value的shape必须是知道的。
- name:变量的名字。
- dypte:变量的类型,小数的默认是float32,整数默认是int32。
2 使用tf.get_variable函数创建变量
tf.get_variable(name,shape=None,dtype=None,initializer=None,regularizer=None,trainable=True,collections=None,caching_device=None,partitioner=None,validate_shape=True,use_resource=None,custom_getter=None)
函数功能:
根据变量的名称来获取变量或者创建变量。
参数:
- name:变量的名称(必选)。
- shape:变量的shape。
- dtype:变量的数据类型。
- initializer:变量的初始化值。
2.1 根据变量的名称创建变量
b = tf.get_variable(name="b", initializer=[1., 2., 3.])
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
print(b.eval(session=sess))
#[ 1. 2. 3.]
print(b.dtype)
#<dtype: 'float32_ref'>
使用tf.get_variable创建变量的时候,如果不指定name,会报TypeError: get_variable() missing 1 required positional argument: 'name'
2.2 根据变量的名称获取变量
with tf.variable_scope("f"):
#初始化一个变量名称为c的变量
c = tf.get_variable(name="c",shape=[3],initializer=tf.constant_initializer([1,2,3])) with tf.variable_scope("f",reuse=True):
d = tf.get_variable(name="c",shape=[3])
sess = tf.Session()
init = tf.initialize_all_variables()
sess.run(init)
print(d.eval(session=sess))
#[ 1. 2. 3.]
print(c.eval(session=sess))
#[ 1. 2. 3.]
print(d == c)
#True
在使用tf.get_variable()根据变量的名称来获取已经生成变量的时候,需要通过tf.variable_scope函数来生成一个上下文管理器,并明确指定在这个上下文管理器中。获取变量值的时候,需要将上下文管理器中的reuse设置为True,才能直接获取已经声明的变量,如果不设置reuse会报错。需要注意的是,如果变量名在上下文管理器中已经存在,在获取的时候,如果不将reuse设置为True则会报错。同理,如果上下文管理器中不存在变量名,在使用reuse=True获取变量值的时候,也会报错。
补充:
(1)tf.variable_scope的嵌套
with tf.variable_scope("a"):#默认是False
#查看上下文管理器中的reuse的值
print(tf.get_variable_scope().reuse) #False
with tf.variable_scope("b",reuse=True):
print(tf.get_variable_scope().reuse) #True
#如果reuse是默认的则保持和上一层的reuse值一样
with tf.variable_scope("c"):
print(tf.get_variable_scope().reuse) #True
print(tf.get_variable_scope().reuse) #False
(2)上下文管理器与变量名
#没有上下文管理器
a = tf.get_variable(name="a",shape=[2],initializer=tf.constant_initializer([1,2]))
print(a.name) #a:0,a就是变量名 #声明上下文管理器
with tf.variable_scope("f"):
b = tf.get_variable(name="b",shape=[2],initializer=tf.constant_initializer([1,2]))
print(b.name) #f/b:0,f代表的是上下文管理器的名称,b代表的是变量的名称
#嵌套上下文管理器
with tf.variable_scope("g"):
c = tf.get_variable(name="c",shape=[2],initializer=tf.constant_initializer([1,2]))
print(c.name)#f/g/c:0
(3)通过上下文管理器和变量名来获取变量
#通过带上下文管理器名称和变量名来获取变量
with tf.variable_scope("",reuse=True):
d = tf.get_variable(name="f/b")
print(d == b) #True
e = tf.get_variable(name="f/g/c")
print(e == c) #True
TensorFlow创建变量的更多相关文章
- 使用TensorFlow创建第变量定义和运行方式
import tensorflow as tf# 熟悉tensorflow的变量定义和运行方式v1 = tf.Variable(2) #定义变量并给变量赋值v2 = tf.Variable(48) c ...
- TensorFlow 使用变量共享
参考: https://www.tensorflow.org/programmers_guide/variable_scope 举例说明 TensorFlow中的变量一般就是模型的参数.当模型复杂的时 ...
- tensorflow冻结变量方法(tensorflow freeze variable)
最近由于项目需要,要对tensorflow构造的模型中部分变量冻结,然后继续训练,因此研究了一下tf中冻结变量的方法,目前找到三种,各有优缺点,记录如下: 1.名词解释 冻结变量,指的是在训练模型时, ...
- Tensorflow之变量赋值输出1+2+3+4+5+6+7+8+...
一.导入tensorflow import tensorflow as tf 二.定义计算图 (1)常量初始化 constant_name = tf.constant(value) (2)变量初始化 ...
- TensorFlow创建DeepDream网络
TensorFlow创建DeepDream网络 Google 于 2014 年在 ImageNet 大型视觉识别竞赛(ILSVRC)训练了一个神经网络,并于 2015 年 7 月开放源代码. 该网络学 ...
- TF:Tensorflow定义变量+常量,实现输出计数功能—Jason niu
#TF:Tensorflow定义变量+常量,实现输出计数功能 import tensorflow as tf state = tf.Variable(0, name='Parameter_name_c ...
- Robotframework(4):创建变量的类型和使用
转载:http://www.cnblogs.com/CCGGAAG/p/7800321.html 实际的测试过程中,编写脚本时,我们需要创建一些变量来暂时或者永久性的存储数据,那么在Robotfram ...
- js 动态创建变量
js 动态创建变量 CreationTime--2018年7月2日15点04分 Author:Marydon 1.实现方式 通过eval()实现 2.代码实现 /** * 声明一个函数 * @ex ...
- Tensorflow创建和读取17flowers数据集
http://blog.csdn.net/sinat_16823063/article/details/53946549 Tensorflow创建和读取17flowers数据集 标签: tensorf ...
随机推荐
- bzoj 3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛——前缀和优化dp / 排列组合
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3398 好简单呀.而且是自己想出来的. dp[ i ]表示最后一个牡牛在 i 的方案数. 当前 ...
- YUV转换成RGB算法
YUV转换成RGB void yuvtorgb ( double *rgb,unsigned char *yuv) { int i; rgb[] = ] + + ] - ); // r rgb[] = ...
- [转载]Linux内核list_head学习(二)
前一篇文章讨论了list_head 结构的基本结构和实现原理,本文主要介绍一下实例代码. 自己如果想在应用程序中使用list_head 的相应操作(当然应该没人使用了,C++ STL提供了list 用 ...
- 得到properties配置文件内容
代码: 1.配置文件内容 2.文件所在项目中位置: 3.java代码: 01.得到键值对: @Test public void getProp() { Properties prop = new Pr ...
- 西安电子科技大学第16届程序设计竞赛 G-小国的复仇
西安电子科技大学第16届程序设计竞赛网络同步赛 G-小国的复仇 2 链接:https://www.nowcoder.com/acm/contest/107/G来源:牛客网 题目描述 众所周知,汀老师是 ...
- 查看,创建,删除,映射rbd镜像
标签(空格分隔): ceph,ceph实验,pg 1. 创建镜像: [root@node3 ~]# rbd create testpool/foo --size 1024 2. 查看镜像信息: [ro ...
- Redis 复制技术和高可用sentinel(哨兵模式)
redis的复制技术和高可用(哨兵模式) 1 复制 为什么要复制 实现数据的多副本存储,从而可以实现服务的高可用 提供更好的读性能复制技术的关键点及难点 如何指定被复制对象 增量还是全量以及如何实现增 ...
- c++ 图解快速排序算法
第一.算法描述 快速排序由C. A. R. Hoare在1962年提出,该算法是目前实践中使用最频繁,实用高效的最好排序算法, 快速排序算法是采用分治思想的算法,算法分三个步骤 从数组中抽出一个元素作 ...
- 关于WinPE安装操作系统
在WinPE安装操作系统,最好用虚拟光驱打开安装镜像文件,或者把镜像文件解压后直接安装. 最好不要用工具盘里所带的一键安装,复制等等功能,因为这些功能往往会安装一些其他的附带功能,不是清洁版的.
- 记一次完整的android源码截屏事件的捕获<标记砖>
http://blog.csdn.net/buptgshengod/article/details/19911909?utm_source=tuicool&utm_medium=referra ...