assign()函数
tf中assign()函数可用于对变量进行更新包括变量的value和shape。
涉及以下函数:
- tf.assign(ref, value, validate_shape = None, use_locking = None, name=None)
- tf.assign_add(ref, value, use_locking = None, name=None)
- tf.assign_sub(ref, value, use_locking = None, name=None)
- tf.variable.assign(value, use_locking=False)
- tf.variable.assign_add(delta, use_locking=False)
- tf.variable.assign_sub(delta, use_locking=False)
这6个函数本质上是一样的,都是用来对变量值进行更新,其中tf.assign还可以更新变量的shape。
解释一下它们的意思:tf.assign是用value的值赋给ref,这种赋值会覆盖掉原来的值,即更新而不会创建一个新的tensor。tf.assign_add相当于ref=ref+value来更新ref。tf.assign_sub相当于ref=ref-value来更新ref。tf.variable.assign相当于tf.assign(ref, value)。同理tf.variable.assign_add和tf.variable.assign_sub。
下面对tf.assign函数进行详细说明。
tf.assign(ref, value, validate_shape = None, use_locking = None, name=None)
args:
- ref:一个可变的张量。应该来自变量节点,节点可能未初始化,参考下面的例子。
- value:张量。必须具有与 ref 相同的类型。是要分配给变量的值。
- validate_shape:一个可选的 bool。默认为 True。如果为 true, 则操作将验证 "value" 的形状是否与分配给的张量的形状相匹配;如果为 false, "ref" 将对 "值" 的形状进行引用。
- use_locking:一个可选的 bool。默认为 True。如果为 True, 则分配将受锁保护;否则, 该行为是未定义的, 但可能会显示较少的争用。
- name:操作的名称(可选)。
返回:
一个在赋值完成后将保留 "ref" 新值的张量。
现在举三个例子,说明三个问题:
例子1:assign操作会初始化相关的节点,并不需要tf.global_variables_initializer()初始化,但是并非所有的节点都会被初始化。
#-*-coding:utf-8-*-
import tensorflow as tf
import numpy as np weights=tf.Variable(tf.random_normal([1,2],stddev=0.35),name="weights")
biases=tf.Variable(tf.zeros([3]),name="biases")
x_data = np.float32(np.random.rand(2, 3)) # 随机输入2行3列的数据 y = tf.matmul(weights, x_data) + biases update=tf.assign(weights,tf.random_normal([1,2],stddev=0.50))#正确
#update=weights.assign(tf.random_normal([1,2],stddev=0.50))#正确,和上句意义相同 #init=tf.global_variables_initializer() with tf.Session() as sess:
#sess.run(init)
for _ in range(2):
sess.run(update)
print(sess.run(weights))#正确,因为assign操作会初始化相关的节点
print(sess.run(y))#错误,因为使用了未初始化的biases变量
例子2:tf.assign()操作可以改变变量的shape,只需要令参数validate_shape=False,默认为True。
#-*-coding:utf-8-*- import tensorflow as tf
x = tf.Variable(0)
y = tf.assign(x, [5,2], validate_shape=False)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print (sess.run(x))#输出0
print (sess.run(y))#输出[5 2]
print (sess.run(x))#输出[5 2]
例子3:assign都会在图中产生额外的操作,可用tf.Variable.load(value, session)实现从图外赋值不产生额外的操作。
#-*-coding:utf-8-*- import tensorflow as tf
x = tf.Variable(0)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
print(sess.run(x)) # 输出 0
x.load(5, sess)
print(sess.run(x)) # 输出 5
assign()函数的更多相关文章
- smarty的ASSIGN()函数
http://blog.sina.com.cn/s/blog_6721f25c01011qdj.html 主要是把程序里面的值付给模板,因为使用smarty时,模板里面是没有PHP代码的,无法显示在操 ...
- TensorFlow中assign函数
tf.assign assign ( ref , value , validate_shape = None , use_locking = None , name = None ) 定义在:tens ...
- std::string::assign函数
string& assign (const string& str); string& assign (const string& str, size_t subpos ...
- R 语言assign 和get 函数用法
assign函数在循环时候,给变量赋值,算是比较方便 1.给变量赋值 for (i in 1:(length(rowSeq)-1)){ assign(paste("nginx_server_ ...
- C++ string 类中的 assign()函数
C++ string 类的成员函数,用于拷贝.赋值操作,它们允许我们顺次地把一个 string 对象的部分内容拷贝到另一个 string 对象上. 函数原型 string &operator= ...
- 12月15日下午Smarty模板函数
1.{$var=...} 这是{assign}函数的简写版,你可以直接赋值给模版,也可以为数组元素赋值. <{$a = 10}><!--赋值语句--> <{$a}> ...
- Smarty模板函数
1.{$var=...} 这是{assign}函数的简写版,你可以直接赋值给模版,也可以为数组元素赋值. <{$a = 10}><!--赋值语句--> <{$a}> ...
- C++string中有关字符串内容修改和替换的函数浅析
1.assign() 原型: //string (1) basic_string& assign (const basic_string& str); //substring (2) ...
- javascript 之 location.href、跨窗口调用函数
location.href这个东西常常用于跳转,location既是window对象的属性,又是document对象的属性. JavaScript hash 属性 -- 返回URL中#符号后面的内容 ...
随机推荐
- LevelDB原理解析
LevelDb有如下一些特点: 首先,LevelDb是一个持久化存储的KV系统,和Redis这种内存型的KV系统不同,LevelDb不会像Redis一样狂吃内存,而是将大部分数据存储到磁盘上. 其次, ...
- 深度学习目标检测综述推荐之 Xiaogang Wang ISBA 2015
一.INTRODUCTION部分 (1)先根据时间轴讲了历史 (2)常见的基础模型 (3)讲了深度学习的优势 那就是feature learning,而不用人工划分的feature engineeri ...
- PHP学习 Object Oriented 面向对象 OO
定义类class class_name [extends partclass_name]{public private protected var property_name = value;publ ...
- PAT甲题题解-1059. Prime Factors (25)-素数筛选法
用素数筛选法即可. 范围long int,其实大小范围和int一样,一开始以为是指long long,想这就麻烦了该怎么弄. 而现在其实就是int的范围,那难度档次就不一样了,瞬间变成水题一枚,因为i ...
- PAT甲题题解-1074. Reversing Linked List (25)-求反向链表
题意说的很清楚了,这种题的话,做的时候最好就是在纸上自己亲手模拟一下,清楚一下各个指针的情况, 这样写的时候就很清楚各个指针变量保存的是什么值. PS:一次AC哈哈,所以说自己动手在纸上画画还是很有好 ...
- Linux内核实验作业七
实验作业:Linux内核如何装载和启动一个可执行程序 20135313吴子怡.北京电子科技学院 [第一部分]理解编译链接的过程和ELF可执行文件格式 1.编译链接的过程 2.ELF可执行文件格式 一个 ...
- opencv2 用imwrite 抽取并保存视频图像帧
最近在写一个车辆检测程序,程序中需要获取图像帧,并保存为图片,且放到指定目录中去,我在网上查了很多发现都是opencv1的有关操作,没有opencv2的操作,我参考网上的例子,结合着用opencv2新 ...
- windows8/10+Ubuntu Kylin(优麒麟)双系统
1.参考资料:http://www.jianshu.com/p/2eebd6ad284d 中第三种U盘启动方式安装完成 2.安装过程: (1)首先将一个盘空出来,做好其中数据的备份.启动win+X磁盘 ...
- extjs几个奇怪的错误
在用Extjs进行网页开发的时候,遇见了一下两个错误,这两个错误的位置用firebug调试显示在extjs-all.js Ext.resetElement is undefined g.el is n ...
- Kivy 中文教程 实例入门 简易画板 (Simple Paint App):0. 项目简介 & 成果展示
本教程咪博士将带领大家学习创建自己的窗口部件 (widget).最终,我们完成的作品是一个简易的画板程序. 当用 kivy 创建应用时,我们需要仔细思考以下 3 个问题: 我们创建的应用需要处理什么数 ...