MNIST交互式環(huán)境
文檔中的 Python 示例使用一個會話 Session 來 啟動圖, 并調(diào)用 Session.run() 方法執(zhí)行操作.
為了便于使用諸如 IPython 之類的 Python 交互環(huán)境, 可以使用InteractiveSession
代替Session
類, 使用 Tensor.eval()
和 Operation.run()
方法代替 Session.run()
. 這樣可以避免使用一個變量來持有會話.
# 進入一個交互式 TensorFlow 會話.
import tensorflow as tf
sess = tf.InteractiveSession()
x = tf.Variable([1.0, 2.0])
a = tf.constant([3.0, 3.0])
# 使用初始化器 initializer op 的 run() 方法初始化 'x'
x.initializer.run()
# 增加一個減法 sub op, 從 'x' 減去 'a'. 運行減法 op, 輸出結(jié)果
sub = tf.sub(x, a)
print (sub.eval())#原本是要通過run(sub)返回一個結(jié)果的,現(xiàn)在可以直接輸出
# ==> [-2. -1.]
Tensor
# 創(chuàng)建一個變量, 初始化為標量 0.
state = tf.Variable(0, name="counter")
# 創(chuàng)建一個 op, 其作用是使 state 增加 1
one = tf.constant(1)
new_value = tf.add(state, one)
update = tf.assign(state, new_value)
# 啟動圖后, 變量必須先經(jīng)過`初始化` (init) op 初始化,
# 首先必須增加一個`初始化` op 到圖中.
init_op = tf.initialize_all_variables()#定義了一個方法劲够,需要run才能執(zhí)行
# 啟動圖, 運行 op
with tf.Session() as sess: #啟動了一個可以自動關(guān)閉的session
# 運行 'init' op
sess.run(init_op)
# 打印 'state' 的初始值
print (sess.run(state))
# 運行 op, 更新 'state', 并打印 'state'
for _ in range(3):
sess.run(update)
print (sess.run(state))
# 輸出:
# 0
# 1
# 2
# 3
通常會將一個統(tǒng)計模型中的參數(shù)表示為一組變量. 例如, 你可以將一個神經(jīng)網(wǎng)絡(luò)的權(quán)重作為某個變量存儲在一個 tensor 中. 在訓練過程中, 通過重復運行訓練圖, 更新這個 tensor.
Feed
TensorFlow 還提供了 feed 機制, 該機制 可以臨時替代圖中的任意操作中的 tensor 可以對圖中任何操作提交補丁, 直接插入一個 tensor.
feed 使用一個 tensor
值臨時替換一個操作的輸出結(jié)果. 你可以提供 feed 數(shù)據(jù)作為run()
調(diào)用的參數(shù). feed 只在調(diào)用它的方法內(nèi)有效, 方法結(jié)束, feed 就會消失. 最常見的用例是將某些特殊的操作指定為 "feed" 操作, 標記的方法是使用tf.placeholder()
為這些操作創(chuàng)建占位符.
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.mul(input1, input2)
with tf.Session() as sess:
print (sess.run([output], feed_dict={input1:[7.], input2:[2.]}))#將兩個數(shù)組分別賦值給兩個占位符
# 輸出:
# [array([ 14.], dtype=float32)]
for a larger-scale example of feeds. 如果沒有正確提供 feed, placeholder()
操作將會產(chǎn)生錯誤.