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中#符号后面的内容 ...
随机推荐
- sqli-labs 下载、安装
sqli-labs 下载.安装 下载地址:https://github.com/Audi-1/sqli-labs phpstudy:http://down.php.cn/PhpStudy2018021 ...
- CocoaPods 遇到 A host target is a "parent" target which embeds a "child" target 问题解决
正在开发的项目中,集成RN,在使用cocoapods 时候,pod install 遇到如下问题: [!] Unable to find host target(s) for ****Extensio ...
- PAT甲级题解-1097. Deduplication on a Linked List (25)-链表的删除操作
给定一个链表,你需要删除那些绝对值相同的节点,对于每个绝对值K,仅保留第一个出现的节点.删除的节点会保留在另一条链表上.简单来说就是去重,去掉绝对值相同的那些.先输出删除后的链表,再输出删除了的链表. ...
- 一份超全超详细的 ADB 用法大全
http://blog.csdn.net/u010375364/article/details/52344120
- LeetCode 551. Student Attendance Record I (C++)
题目: You are given a string representing an attendance record for a student. The record only contains ...
- 重温httpsession①
Session—HTTPSession 服务器创建的,Javaweb提供的 与HTTP协议无关是服务器端对象,保存在服务器端.用来会话跟踪. Cookie与服务器创建,与HTTP协议相关,保存在客户端 ...
- 2018软工实践—Beta冲刺(7)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Beta 冲鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调组内工作 整体软件测试 展示GitHub当日代码/文档签入记录(组 ...
- 团队工作总结及自评 & 补上来的用户调研
http://www.cnblogs.com/case1/ 让同学代发了,辛苦点跳转一下~
- TensorFlow常用API汇总
1.tensorflow的基本运作为了快速的熟悉TensorFlow编程,下面从一段简单的代码开始: import tensorflow as tf #定义‘符号’变量,也称为占位符 a = tf.p ...
- Uploadify提示-Failed,上传不了文件,跟踪onUploadError事件,errorMsg:2156 SecurityError Error #2156 null
在使用Uploadify上传文件时,提示-Failed,上传不了文件 折腾中.....,没有结果.....%>_<%... 于是跟踪onUploadError事件,发现 errorMsg: ...