Tensorflow官方文档学习理解 (二)

交互式使用

在上一篇Tensorflow文档学习理解里面,我们使用了一个会话Session来启动图,并调用Session.run()方法来执行操作。为了便于使用Ipython之类的交互环境,我们可以使用InteractiveSession代替Session类,使用Tensor.eval()Operation.run()方法代替Session.run()。这样可以避免使用一个会话来持有会话。

import tensorflow as tf
sess = tf.InteractiveSession()
# 定义一个变量
x = tf.Variable([1, 2])
a = tf.constant([3, 3])
# 使用初始化器 initializer op 的 run() 方法初始化 'x'
x.initializer.run()
# 执行减法
sub = tf.subtract(x, a)
print(sub.eval())

Tensor

TensorFlow 程序使用 tensor 数据结构来代表所有的数据, 计算图中, 操作间传递的数据都是 tensor. 你可以 把 TensorFlow tensor 看作是一个 n 维的数组或列表. 一个 tensor 包含一个静态类型 rank, 和 一个 shape.

变量

变量维护图执行过程中的状态信息,下面举例说明如何实现一个简单的计数器:

import tensorflow as tf
# 定义一个变量,初始值为0
state = tf.Variable(0, name='counter')
# 定义一个常量,值为1
one = tf.constant(1)
# 将这个变量和这个常量相加
new_val = tf.add(state, one)
# 赋值操作
update = tf.assign(state,new_val)
# 启动图后, 变量必须先经过`初始化` (init) op 初始化,
init_op = tf.global_variables_initializer()
# 上面的那部分是构件图,下面这部分开始执行图
with tf.Session() as sess:
    sess.run(init_op)
    print(sess.run(state))
    for _ in range(3):
        sess.run(update)
        print(sess.run(state))

输出结果如下所示:

在实际操作中,我们通常将一个神经网络的权重作为某个变量存储在一个 tensor 中. 在训练过程中, 通过重复运行训练图, 更新这个 tensor.

Fetch

为了取回操作的输出内容,可以使用Session对象的run()调用,执行图时,传入一些tensor,这些tensor会帮助你取回结果。在之前的例子里面,我们只取回了单个节点的state,但是你也可以取回多个Tensor。

import tensorflow as tf
input1 = tf.constant(3)
input2 = tf.constant(2)
input3 = tf.constant(5)
intermed = tf.add(input2, input3)
mul = tf.multiply(input1, intermed)
with tf.Session() as sess:
    result = sess.run([intermed, mul])
    print(result)

输出结果:

Feed

上述示例中的Tensor是以常量或则变量的形式存储,TensorFlow还提供了Feed机制,该机制可以临时替代图中操作的Tensor,feed使用一个tensor值,临时替换一个操作的输出结果,你可以使用feed数据作为run()调用的参数,feed只在调用它的方法内有效,feed结束,调用就会消失。通常用tf.placeholder,为这些操作创建占位符。

import tensorflow as tf
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.multiply(input1, input2)
with tf.Session() as sess:
    print(sess.run(output, feed_dict={input1:[7], input2:[2]}))

输出结果:

猜你喜欢

转载自blog.csdn.net/weixin_39059031/article/details/82824983