《TensorFlow 与卷积神经网络 (从算法到入门)》学习笔记
通过函数 tf.get_operatios_by_name() 获取图中所有operation对象
import tensorflow as tf
A_tf = tf.Variable([[1, 2, 3], [1, 2, 3]], dtype=tf.float32)
A_tf.assign(A_tf+1)
graph = tf.get_default_graph()
ops = graph.get_operations()
print(ops)
# 输出为:
# [<tf.Operation 'Variable/initial_value' type=Const>,
# <tf.Operation 'Variable' type=VariableV2>,
# <tf.Operation 'Variable/Assign' type=Assign>,
# <tf.Operation 'Variable/read' type=Identity>,
# <tf.Operation 'add/y' type=Const>,
# <tf.Operation 'add' type=AddV2>,
# <tf.Operation 'Assign' type=Assign>]
获取并执行operation 对象
import tensorflow as tf
A_tf = tf.Variable([[1, 2, 3], [1, 2, 3]], dtype=tf.float32)
A_tf.assign(A_tf+1)
graph = tf.get_default_graph()
ops = graph.get_operations()
print(ops)
init_op = graph.get_operation_by_name('Variable/Assign')
add_op = graph.get_operation_by_name('Assign')
with tf.Session() as sess:
sess.run(init_op)
print('\n')
print(sess.run(A_tf))
sess.run(add_op)
print('\n')
print(sess.run(A_tf))
# 输出为:
# [<tf.Operation 'Variable/initial_value' type=Const>,
# <tf.Operation 'Variable' type=VariableV2>,
# <tf.Operation 'Variable/Assign' type=Assign>,
# <tf.Operation 'Variable/read' type=Identity>,
# <tf.Operation 'add/y' type=Const>,
# <tf.Operation 'add' type=AddV2>,
# <tf.Operation 'Assign' type=Assign>]
#
# [[1. 2. 3.]
# [1. 2. 3.]]
#
# [[2. 3. 4.]
# [2. 3. 4.]]
-
语句graph.get_operation_by_name() 通过名称 ‘Variable/Assign’ 获取到的操作节点 (init_op) 等同于变量初始化操作 tf.global_variables_initializer(), 然后通过语句 sess.run(init_op) 执行变量初始化操作
-
第一次执行 sess.run(A_tf), 其实只 指执行了 A_tf = tf.Variable([[1, 2, 3], [1, 2, 3]], dtype=tf.float32), 所以得到的结果是 [[1. 2. 3.], [1. 2. 3.]]
-
语句 graph.get_operation_by_name() 通过名称 ‘Assign’ 获取到的操作节点 (add_op) 是A_tf.assign()赋值语句, 然后通过语句 sess.run(add_op) 去执行这个重新赋值语句
-
第二次执行 sess.run(A_tf)时,A_tf 已经完成了重新赋值,所以得到的结果是 [[2. 3. 4.], [2. 3. 4.]]