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()函数的更多相关文章

  1. smarty的ASSIGN()函数

    http://blog.sina.com.cn/s/blog_6721f25c01011qdj.html 主要是把程序里面的值付给模板,因为使用smarty时,模板里面是没有PHP代码的,无法显示在操 ...

  2. TensorFlow中assign函数

    tf.assign assign ( ref , value , validate_shape = None , use_locking = None , name = None ) 定义在:tens ...

  3. std::string::assign函数

    string& assign (const string& str); string& assign (const string& str, size_t subpos ...

  4. R 语言assign 和get 函数用法

    assign函数在循环时候,给变量赋值,算是比较方便 1.给变量赋值 for (i in 1:(length(rowSeq)-1)){ assign(paste("nginx_server_ ...

  5. C++ string 类中的 assign()函数

    C++ string 类的成员函数,用于拷贝.赋值操作,它们允许我们顺次地把一个 string 对象的部分内容拷贝到另一个 string 对象上. 函数原型 string &operator= ...

  6. 12月15日下午Smarty模板函数

    1.{$var=...} 这是{assign}函数的简写版,你可以直接赋值给模版,也可以为数组元素赋值. <{$a = 10}><!--赋值语句--> <{$a}> ...

  7. Smarty模板函数

    1.{$var=...} 这是{assign}函数的简写版,你可以直接赋值给模版,也可以为数组元素赋值. <{$a = 10}><!--赋值语句--> <{$a}> ...

  8. C++string中有关字符串内容修改和替换的函数浅析

    1.assign() 原型: //string (1) basic_string& assign (const basic_string& str); //substring (2) ...

  9. javascript 之 location.href、跨窗口调用函数

    location.href这个东西常常用于跳转,location既是window对象的属性,又是document对象的属性. JavaScript hash 属性 -- 返回URL中#符号后面的内容 ...

随机推荐

  1. PTA (Advanced Level) 1002 A+B for Polynomials

    1002 A+B for Polynomials This time, you are supposed to find A+B where A and B are two polynomials. ...

  2. 《Linux内核分析》课程第一周学习总结

    姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

  3. 冲刺Two之站立会议1

    今天我们开始了第二个冲刺期的工作,大家重新讨论了下个阶段的工作内容,由于上次演示我们主要只是实现了摄像头开启.通信和语音通话的功能,而且各部分还有待完善.所以我们决定了之后的主要工作的内容:之前服务器 ...

  4. “耐撕”团队 2016.03.25 站立会议

    1.时间:2016.3.23  2.成员: Z 郑蕊 * 组长 (博客:http://www.cnblogs.com/zhengrui0452/), P 濮成林(博客:http://www.cnblo ...

  5. PAT 甲级 1029 Median

    https://pintia.cn/problem-sets/994805342720868352/problems/994805466364755968 Given an increasing se ...

  6. Helm 安装 wordpress

    1. 前置需要安装 storageclass 然后 安装helm 客户端 helm tiller 服务端 2. 设置 当前的位阿里云的 repo 3. 查找 wordpress的镜像 helm sea ...

  7. Alpha、伪Beta 发布后,夏一鸣的个人感想与体会

    伪Beta发布在4月15日拉开了帷幕,夏一鸣代表OneZero团队上台进行了Account的发布.产品发布成功,但依然存在问题和不足.以下就Alpha.伪Beta 发布谈一谈我自己(夏一鸣)的想法. ...

  8. DataGridView列标题居中,内容居中

    //列标题居中 dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleC ...

  9. 【华为机试】—— 15.求int型正整数在内存中存储时1的个数

    题目 解法 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner ...

  10. 模拟APP存储空间、内存不足情况下软件正常运行

    1.进行临界测试,手机盘空间存满的条件下应用会有何表现: 方法一:adb shell dd if=/dev/zero of=/mnt/sdcard/bigfile 方法二:哆啦A工具生成文件 2.内存 ...