变量
#创建一个变量初始化为0
state = tf.Variable(0,name="counter")
#创建一个op,其作用使state增加1
one = tf.constant(1)
new_value = tf.add(state,one)
update = tf.assign(state ,new_value)
#启动图之后变量必须经过初始化之后
#首先启动一个初始化到图中
init_op = tf.initialize_all_variables()
#启动图,运行op
with tf.Session() as sess:
#运行 init op
sess.run(init_op)
#打印state的初始值
print(sess.run(state))
#运行op 并更新 state,并打印state
for x in range(3):
sess.run(update)
print(sess.run(state))
# 输出:
# 0
# 1
# 2
# 3
assign()操作是图描述表达式的一部分,正如add()操作一样,在调用之前并不会真正执行赋值操作
通常会将一个统计模型中的参数表示为一组变量。例如可以将一个神经网络中的权重作为某个变量存储在一个tensor中,在训练过程中,通过重复运行训练图更行这个tensor.
Fetch
input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(3.0)
intermed = tf.add(input2,input3)
mul = tf.multiply(input1,intermed) #高版本的写法
with tf.Session() as sess:
result = sess.run([mul, intermed])
print(result)
需要获取的多个 tensor 值,在 op 的一次运行中一起获得(而不是逐个去获取 tensor)。
Feed
上述示例在计算图中引入了 tensor, 以常量或变量的形式存储. TensorFlow 还提供了 feed 机制, 该机制可以临时替代图中的任意操作中的 tensor 可以对图中任何操作提交补丁, 直接插入一个 tensor.
feed 使用一个 tensor 值临时替换一个操作的输出结果. 你可以提供 feed 数据作为 run() 调用的参数. feed 只在调用它的方法内有效, 方法结束, feed 就会消失. 最常见的用例是将某些特殊的操作指定为 "feed" 操作, 标记的方法是使用 tf.placeholder() 为这些操作创建占位符.
input1 = tf.placeholder(tf.types.float32)
input2 = tf.placeholder(tf.types.float32)
output = tf.mul(input1, input2)
with tf.Session() as sess:
print(sess.run([output], feed_dict={input1:[7.], input2:[2.]}))
# 输出:
# [array([ 14.], dtype=float32)]
如果没有正确提供 feed, placeholder() 操作将会产生错误。
网友评论