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. Keras学习笔记。

    1. keras.layers.Dense (Fully Connected Neural NetWork),所实现的运算是output = activation(dot(input, kernel) ...

  2. EOS开发基础之五:使用cleos命令行客户端操作EOS——智能合约之Exchange

    先回答一下上一节中留下的问题,为什么我就看不到eosio这个账户中的钱呢?我明明为它create了很多token啊. 对,你是create了,但是没有issue啊.create了1000000000 ...

  3. Call actvity after viewpager is finished

    private OnPageChangeListener mListener = new OnPageChangeListener() { @Override public void onPageSe ...

  4. springmvc 事务回滚说明

    Spring中的@Transactional(rollbackFor = Exception.class)属性详解 序言 今天我在写代码的时候,看到了.一个注解@Transactional(rollb ...

  5. 猎豹CEO傅盛:95%的人碌碌无为,只是不懂这一点!

      我一直在思索,怎么才能让一家公司更快地成长?一个人怎么才能从一群人的竞争当中脱颖而出? 1. 人的四种认知状态 最近我看了一幅图,我在其上加了一个数字注脚. 这是一个人认知的四种状态——“不知道自 ...

  6. Linux内核分析 一二章读书笔记

    第一章 Linux内核简介 1.Unix (1)Unix系统很简洁 (2)在Unix中,所以东西都被当作文件对待,通过一套相同的系统调用接口来进行:open(),read(),write(),lsee ...

  7. 《Linux内核分析》第三周学习笔记

    <Linux内核分析>第三周学习笔记 构造一个简单的Linux系统MenuOS 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.stud ...

  8. yum 安装mongodb mysql

    // 云环境下更新包 (center os)yum update (多更有益) 修改yum包管理配置:vi /etc/yum.repos.d/mongodb-org-3.4.repo // 会自动新建 ...

  9. 个人作业Week2-代码复审

    代码复审Check List 概要部分 代码能符合需求和规格说明么? 符合.针对-c和-s可以将正确的结果输出到相应的sudoku.txt,并在规定的时间内求解. 代码设计是否有周全的考虑? 有的.我 ...

  10. 12th 对礼物挑选小工具的WBS功能分解

    WBS功能分解: 功能 一级子功能 二级子功能 预计用时(分钟) 主页 进入相应页面 1.如果用户已处于登录状态,则返回用户登录时的主页 10 2.如果用户处于未登录状态,则返回用户预览主页. 10 ...