瞭解Tensorflow的開發基本步驟
1. 定義Tensorflow輸入節點
定義輸入節點的方法
- 通過佔位符定義(一般情況)
- 通過字典類型定義(用於輸入比較多的情況)
- 直接定義(很少使用)
1. 通過佔位符定義(一般情況)
如 y = 2x 的大致擬閤中就是使用佔位符定義輸入節點的
X = tf.placeholder("float")
Y = tf.placeholder("float")
2. 通過字典類型定義(用於輸入比較多的情況)
和第一種比較類似
# 佔位符
inputdict = {
'x': tf.placeholder("float"),
'y': tf.placeholder("float")
}
3. 直接定義(很少使用)
將定義好的 Python 變量直接放到 OP 節點中參與輸入的運算,將模擬數據變量直接放到模型中進行訓練。
#生成模擬數據
train_X =np.float32( np.linspace(-1, 1, 100))
train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.3 # y=2x,但是加入了噪聲
#圖形顯示
plt.plot(train_X, train_Y, 'ro', label='Original data')
plt.legend()
plt.show()
# 模型參數
W = tf.Variable(tf.random_normal([1]), name="weight")
b = tf.Variable(tf.zeros([1]), name="bias")
# 前向結構
z = tf.multiply(W, train_X)+ b
2. 定義“學習參數”變量
直接定義
W = tf.Variable(tf.random_normal([1]), name = "weigth")
b = tf.Variable(tf.zeros([1]), name = "bias")
字典定義
# 模型參數
paradict = {
'w' = tf.Variable(tf.random_normal([1]), name = "weigth"),
'b' = tf.Variable(tf.zeros([1]), name = "bias")
}
# 向前結構
z = tf.multipply(X, paradict['w']) + paradict['b']
3. 定義“運算”
正向傳播模型
- 單層神經網絡
- 多層神經網絡
- 卷積神經網絡
- 循環神經網絡
- GoogLeNet
- Resnet
定義損失函數
主要用於計算“輸出值”與“目標值”之間的誤差,是配合反向傳播使用的
(必須可導)
Tensorflow框架已經爲我們準備好了
4. 優化函數,優化目標
5. 初始化所有變量
# 初始化變量
init = tf.global_variables_initializer()
# 這步必須在所有變量和OP定義完成之後,這樣才能保證定義內容的有效性,否則無法使用session中的run來進行算值
# 啓動session
with tf.Session() as sess:
sess.run(init)
6. 迭代更新參數到最優解
在迭代訓練環節,都是需要通過建立一個session來完成的,常用的是使用with 語法,可以在session結束後自行關閉
with tf Session() as sess:
sess.run(init)
for epoch in range(training_epochs):
for (x, y) in zip(train_X, train_Y):
sess.run(optimizer, feed_dict={X: x, Y: y})
使用MINIBATCH的概念進行迭代訓練(每次取一定量的數據同時放到網絡裏進行訓練)
7. 測試模型
print ("cost=", sess.run(cost, feed_dict={X: train_X, Y: train_Y}), "W=", sess.run(W), "b=", sess.run(b))
# print ("cost:",cost.eval({X: train_X, Y: train_Y}))
8. 使用模型
print ("x=0.2,z=", sess.run(z, feed_dict={X: 0.2}))