常見的tensorflow開發基本步驟

(1)定義TensorFlow輸入節點

    a.通過佔位符定義[常用]:具體使用tf.placeholder函數

x=tf.placeholder("float")

    b.通過字典類型定義

inputdict={
    'x'=tf.placeholder("float"),
    'y'=tf.placeholder("float")
}

    c.直接定義

train_x = np.float32(np.linspace(-1,1,100))

(2)定義“學習參數“的變量

   a.直接定義:使用tf.Variable對參數直接定義

w=tf.Variable(tf.random_normal([1]),name="weight")
b=tf.Variable(tf.zeros([1]),name="bias")

 

   b.字典定義 【參數過多,一般使用這種】

#模型參數
paradict={
    'w':tf.Variable(tf.random_normal([1])),
    'b'=tf.Variable(tf.zeros([1]))
}
#計算
z=tf.multiply(X,paradict['w'])+paradict['b']

 

(3)定義運算

   a.正向傳播模型

   b.定義損失函數:損失函數主要是計算”輸出值“與”目標值“之間的誤差,是配合反向傳播使用的 

    

(4)優化函數

(5)初始化所有變量

init=tf.global_variables_initializer()
#使用這行代碼,必須再所有變量和OP定義完成後,才能保證定義的內容有效

#啓動Session
with tf.Session() as sess:
    sess.run(init)

(6)迭代更新參數到最優解

在迭代訓練環節,都是需要建立一個session來完成的。在session中通過run來運行模型中的節點。

with tf.Session() as sess:

    # 向模型輸入數據
    for epoch in range(training_epochs):
        for (x, y) in zip(train_X, train_Y):
            sess.run(optimizer, feed_dict={X: x, Y: y})

(7)測試模型:評估模型的好壞

(8)使用模型

完整代碼:

mport tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt


plotdata = { "batchsize":[], "loss":[] }
def moving_average(a, w=10):
    if len(a) < w: 
        return a[:]    
    return [val if idx < w else sum(a[(idx-w):idx])/w for idx, val in enumerate(a)]


#生成模擬數據
train_X = 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()




# 創建模型
# 佔位符
X = tf.placeholder("float")#代表x的輸入
Y = tf.placeholder("float")#代表對應的真實值
# 模型參數
W = tf.Variable(tf.random_normal([1]), name="weight")#初始化爲[-1,1]的隨機數,形狀爲以維的數字
b = tf.Variable(tf.zeros([1]), name="bias")

# 前向結構
z = tf.multiply(X, W)+ b

#反向優化
'''將正向生成的值,觀察其與真實值的差距,再通過反向過程將裏面的參數進行調整,
接着再次正向生成預測值並與真實值進行對比,以此循環下去。'''
cost =tf.reduce_mean( tf.square(Y - z))#生成值與真實值的平方差
learning_rate = 0.01#學習速率,值越大,速度越快,但是越不精確,反之
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
#訓練模型----迭代
# 初始化所所有變量
init = tf.global_variables_initializer()
# 定義參數
training_epochs = 20
display_step = 2

# 啓動session(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})

        #顯示訓練中的詳細信息
        if epoch % display_step == 0:
            loss = sess.run(cost, feed_dict={X: train_X, Y:train_Y})
            print ("Epoch:", epoch+1, "cost=", loss,"W=", sess.run(W), "b=", sess.run(b))#測試
            if not (loss == "NA" ):
                plotdata["batchsize"].append(epoch)
                plotdata["loss"].append(loss)

    print (" Finished!")
    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}))

    #圖形顯示
    plt.plot(train_X, train_Y, 'ro', label='Original data')
    plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label='Fitted line')
    plt.legend()
    plt.show()
    
    plotdata["avgloss"] = moving_average(plotdata["loss"])
    plt.figure(1)
    plt.subplot(211)
    plt.plot(plotdata["batchsize"], plotdata["avgloss"], 'b--')
    plt.xlabel('Minibatch number')
    plt.ylabel('Loss')
    plt.title('Minibatch run vs. Training loss')
     
    plt.show()

    print ("x=0.2,z=", sess.run(z, feed_dict={X: 0.2}))

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章