函数原型:

tf.assign(ref, value, validate_shape=None, use_locking=None, name=None)

  Defined in tensorflow/python/ops/state_ops.py.

  将 value 赋值给 ref,并输出 ref,即 ref = value;

  这使得需要使用复位值的连续操作变简单

  Defined in tensorflow/python/framework/tensor_shape.py.

Args Annotations
ref A mutable Tensor. Should be from a Variable node. May be uninitialized.
value A Tensor. Must have the same type as ref. The value to be assigned to the variable.
validate_shape An optional bool. Defaults to True. If true, the operation will validate that the shape of ‘value’ matches the shape of the Tensor being assigned to. If false, ‘ref’ will take on the shape of ‘value’.
use_locking An optional bool. Defaults to True. If True, the assignment will be protected by a lock; otherwise the behavior is undefined, but may exhibit less contention.
name A name for the operation (optional).

Returns :

  Same as “ref”. Returned as a convenience for operations that want to use the new value after the variable has been reset.

函数原型:

tf.assign_add(ref,value,use_locking=None,name=None)

Defined in tensorflow/python/ops/state_ops.py.

See the guide: Variables > Variable helper functions

Update 'ref' by adding 'value' to it.

更新ref的值,通过增加value,即:ref = ref + value;

This operation outputs "ref" after the update is done. This makes it easier to chain operations that need to use the reset value.

函数原型:tf.identity

tf.identity(input,name=None)

Return a tensor with the same shape and contents as input.

返回一个具有相同形状张量和内容作为输入;

Args:

  • input: A Tensor.
  • name: A name for the operation (optional).

Returns:

Tensor. Has the same type as input.

函数原型:tf.control_dependencies

tf.control_dependencies(control_inputs)

tf.control_dependencies()设计是用来控制计算流图的,给图中的某些计算指定顺序。比如:我们想要获取参数更新后的值,那么我们可以这么组织我们的代码。自己的理解:如果不是tf的tensor,并且没有加入到整个图中,则不会执行;

Defined in tensorflow/python/framework/ops.py.

See the guide: Building Graphs > Utility functions

Wrapper for Graph.control_dependencies() using the default graph.

See tf.Graph.control_dependencies for more details.

举个例子:

下面程序要做的是,5次循环,每次循环给x加1,赋值给y,然后打印出来,

x = tf.Variable(0.0)
#返回一个op,表示给变量x加1的操作
x_plus_1 = tf.assign_add(x, 1) #control_dependencies的意义是,在执行with包含的内容(在这里就是 y = x)前
#先执行control_dependencies中的内容(在这里就是 x_plus_1)
with tf.control_dependencies([x_plus_1]):
y = x
init = tf.initialize_all_variables() with tf.Session() as session:
init.run()
for i in xrange(5):
print(y.eval())

由于control_dependencies的所以执行print前都会先执行x_plus_1。

这个打印的是0,0,0,0,0 ,也就是说没有达到我们预期的效果,这是因为此时的y是一个复制了x变量的变量,并未和图上的节点相联系不接受流程控制函数的调遣,

改成如下,

import tensorflow as tf
x = tf.Variable(0.0)
print(x)
x_plus_1 = tf.assign_add(x, 1)
with tf.control_dependencies([x_plus_1]):
y = x + 0.0
print(y) #z=tf.identity(x,name='x')
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for i in range(5):
print(sess.run(y))

<tf.Variable 'Variable:0' shape=() dtype=float32_ref>

Tensor("add:0", shape=(), dtype=float32)

1.0  2.0  3.0  4.0  5.0

可以看到当y定义为节点的输出后,就可以顺利执行操作了,此时y成为节点的输出,可以被图识别。

如果改成这样:

x = tf.Variable(0.0)
x_plus_1 = tf.assign_add(x, 1) with tf.control_dependencies([x_plus_1]):
y = tf.identity(x)#修改部分
init = tf.initialize_all_variables() with tf.Session() as session:
init.run()
for i in range(5):
print(y.eval())
This works: it prints 1, 2, 3, 4, 5.

这时候打印的是1,2,3,4,5

解释:

查询y为:Tensor("Identity_1:0", shape=(), dtype=float32),和节点联系起来了。
tf.identity是返回了一个一模一样新的tensor,再control_dependencies的作用块下,需要增加一个新节点到gragh中。

tensorflow笔记4:函数:tf.assign()、tf.assign_add()、tf.identity()、tf.control_dependencies()的更多相关文章

  1. (四) tensorflow笔记:常用函数说明

    tensorflow笔记系列: (一) tensorflow笔记:流程,概念和简单代码注释 (二) tensorflow笔记:多层CNN代码分析 (三) tensorflow笔记:多层LSTM代码分析 ...

  2. TensorFlow常用的函数

    TensorFlow中维护的集合列表 在一个计算图中,可以通过集合(collection)来管理不同类别的资源.比如通过 tf.add_to_collection 函数可以将资源加入一个 或多个集合中 ...

  3. TensorFlow 常用的函数

    TensorFlow 中维护的集合列表 在一个计算图中,可以通过集合(collection)来管理不同类别的资源.比如通过 tf.add_to_collection 函数可以将资源加入一个或多个集合中 ...

  4. tensorflow笔记3:CRF函数:tf.contrib.crf.crf_log_likelihood()

    在分析训练代码的时候,遇到了,tf.contrib.crf.crf_log_likelihood,这个函数,于是想简单理解下: 函数的目的:使用crf 来计算损失,里面用到的优化方法是:最大似然估计 ...

  5. tensorflow笔记:使用tf来实现word2vec

    (一) tensorflow笔记:流程,概念和简单代码注释 (二) tensorflow笔记:多层CNN代码分析 (三) tensorflow笔记:多层LSTM代码分析 (四) tensorflow笔 ...

  6. tensorflow学习之tf.assign

    tf.assign(ref, value, validate_shape=None, use_locking=None, name=None), 函数功能是将value赋值给ref ref必须是tf. ...

  7. Tensorflow常用的函数:tf.cast

    1.tf.cast(x,dtype,name) 此函数的目的是为了将x数据,准换为dtype所表示的类型,例如tf.float32,tf.bool,tf.uint8等 example:  import ...

  8. tensorflow 笔记11:tf.nn.dropout() 的使用

    tf.nn.dropout:函数官网说明: tf.nn.dropout( x, keep_prob, noise_shape=None, seed=None, name=None ) Defined ...

  9. tensorflow笔记6:tf.nn.dynamic_rnn 和 bidirectional_dynamic_rnn:的输出,output和state,以及如何作为decoder 的输入

    一.tf.nn.dynamic_rnn :函数使用和输出 官网:https://www.tensorflow.org/api_docs/python/tf/nn/dynamic_rnn 使用说明: A ...

随机推荐

  1. EasyPR源码剖析(3):车牌定位之颜色定位

    一.简介 对车牌颜色进行识别,可能大部分人首先想到的是RGB模型, 但是此处RGB模型有一定的局限性,譬如蓝色,其值是255,还需要另外两个分量都为0,不然很有可能你得到的值是白色.黄色更麻烦,它是由 ...

  2. 安卓学习第一节--环境搭建及Android Studio 安装

    1.安装JDK 2.安装AS 安装参考网址 https://www.cnblogs.com/xiadewang/p/7820377.html 下载网址: http://www.android-stud ...

  3. Java中String字符串常量池

    首先看一个例子,通过这个例子更能快速理解String常量池 public static void main(String[] args) { String a = "ab"; St ...

  4. 给area标签添加红色边框

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org ...

  5. 创建JavaScript函数的几种方式

    window.onload = function() { // console.log('ok'); //正规的创建函数 function test(abc, d) { return abc(d); ...

  6. 关于get和post请求的区别

    1.标准答案 GET在浏览器回退时是无害的,而POST会再次提交请求. GET产生的URL地址可以被Bookmark,而POST不可以. GET请求会被浏览器主动cache,而POST不会,除非手动设 ...

  7. su与su -的区别

    su命令从普通用户切换到root用户下虽然可以切换,但是切换过后它所属的环境变量没有切换回原本属于root本身该有的环境变量,使用su - root 就可以切换会本来用户所属自身的变量

  8. linux 启动weblogic重定向日志

    命令启动 nohup ./startWebLogic.sh  会默认输出nohup.out日志文件 时间久了日志文件会很大,占用空前(正常项目会自己处理日志输出,不需要用到nohup的默认输出日志) ...

  9. 去除最后一个li的样式

    推荐::::方法一,使用:first-child    纯css的:first-child伪类就可以胜任此任务,操作很方便,代码量忽略不计.支持IE7+,不支持IE6 :first-child /:l ...

  10. C#语法快速热身

    if选择结构: 简单:if结构 单分子:If-else结构 多重:f-else-if结构 嵌套:if结构 语法: If(条件1){ If(条件2) }else{ } }else{ } Switch结构 ...