TensorFlow学习-- 变量Variables/ Fetch/ Feed

Variables:

参数是在图中有其固定的位置的,不能像普通数据那样正常流动。TensorFlow中将变量/Variables作为一个特殊的算子,可以返回它所保存的可变tensor的句柄。

#!/usr/bin/python
# coding:utf-8
# 变量Variables

import tensorflow as tf

# 创建一个变量,初始化为标量0
state = tf.Variable(0, name="counter")
# 创建一个op,其作用是使state增加1
one = tf.constant(1)
new_value = tf.add(state, one)
# 调用run()执行表达式之前,assign并不会真正执行赋值操作
update = tf.assign(state, new_value)

# 变量必须先初始化
init_op = tf.initialize_all_variables()

with tf.Session() as sess:
    sess.run(init_op)
    # 运行op,更新state,并打印state
    for i in range(5):
        sess.run(update)
        print sess.run(state)

输出:

1
2
3
4
5

assign()在赋值后输出一个张量,该张量保存ref的新值。这样更容易链接需要使用重置值的操作。
def assign(ref, value, validate_shape=None, use_locking=None, name=None)

ref:一个可变的张量。来自Variable节点(可能未初始化)。
value:一个张量。要分配给变量的值,必须与ref具有相同的类型。
validate_shape:若为true,则操作将验证value的shape与要分配的张量的shape相匹配。若为false,ref将呈现value的形状。 (可选项)
use_locking:若为True,则赋值将受锁定保护;默认为True。(可选项)
name:操作的名称。(可选项)
返回值为一个Tensor,在分配完成后保存ref的新值。

Fetch:

为取回操作的输出内容, 可以在使用 Session 对象的 run() 调用 执行图时, 传入一些 tensor,这些tensor可以取回结果,从而可以获取多个tensor值:

#!/usr/bin/python
# coding:utf-8

# Fetch 取回节点的输出内容

import tensorflow as tf

input1 = tf.constant(2.0)
input2 = tf.constant(6.0)
input3 = tf.constant(8.0)

add = tf.add(input3, input2)
mul = tf.multiply(input1, add)

with tf.Session() as sess:
    result = sess.run([mul, add])
    print result

输出:

[28.0, 14.0]

Feed:

Feed机制可以直接在图中插入一个 tensor,可以临时替代图中任意操作中的tensor.feed只在调用它的方法内有效,方法结束 feed 就会消失.
feed使用一个tensor值临时替换一个操作的输出结果.常用的方法是将某些特殊操作指定为feed操作,标记方法是使用tf.placeholder()为这些操作创建占位符.

#!/usr/bin/python
# coding:utf-8
# feed 使用一个 tensor 值临时替换一个操作的输出结果

import tensorflow as tf

input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
input3 = tf.placeholder(tf.float32)
add = tf.add(input3, input2)
mul = tf.multiply(input1, add)
# output = tf.multiply(input1, input2)

with tf.Session() as sess:
    print sess.run([mul, add], feed_dict={input1: [2.], input2: [6.], input3: [8.]})

输出:

[array([ 28.], dtype=float32), array([ 14.], dtype=float32)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值