完整神經網路樣例程式

YangLaura發表於2017-07-06
#完整的神經網路樣例程式
#下面給出了一個完整的程式來訓練神經網路解決二分類問題

import tensorflow as tf
from numpy.random import RandomState




batch_size = 8


w1 = tf.Variable(tf.random_normal([2,3],stddev = 1,seed = 1))
w2 = tf.Variable(tf.random_normal([3,1],stddev = 1,seed = 1))


x = tf.placeholder(tf.float32,shape=(None,2),name = 'x-input')
y_ = tf.placeholder(tf.float32,shape=(None,1),name = 'y-input')


#定義神經網路前向傳播過程
a = tf.matmul(x,w1)
y = tf.matmul(a,w2)




#定義損失函式和反向傳播演算法
cross_entropy = -tf.reduce_mean(
    y_*tf.log(tf.clip_by_value(y,1e-10,1.0)))
train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy)


#通過隨機數生成一個模擬資料集
rdm = RandomState(1)
dataset_size = 128
X = rdm.rand(dataset_size,2)


Y = [[int(x1+x2<1)] for (x1,x2) in X]


#建立一個會話來執行tensorflow程式
with tf.Session() as sess:
    init_op = tf.initialize_all_variables()
    sess.run(init_op)
    print(sess.run(w1))
    print(sess.run(w2))


    STEPS = 5000
    for i in range(STEPS):
        start = (i*batch_size) % dataset_size
        end = min(start+batch_size,dataset_size)
        
        #通過選取的樣本訓練神經網路並更新引數
        sess.run(train_step,feed_dict = {x:X[start:end],y_:Y[start:end]})
        if i%1000 == 0:
            #每隔一段時間計算在所有資料上的交叉熵並輸出,交叉熵越小說明預測的結果和真實的結果差距越小
            total_cross_entropy = sess.run(
                cross_entropy,feed_dict={x:X,y_:Y})
        print("After %d training step,cross entropy on all data is %g" % (1,total_cross_entropy))
        print(sess.run(w1))

        print(sess.run(w2))



‘’‘上面的程式實現了訓練神經網路的全部過程,從這段程式中可以總結出訓練神經網路的過程可以分為一下3個步驟:

1.定義神經網路的結構和向前傳播的輸出結果

2.定義損失函式以及選擇反向傳播優化演算法

        3.生成會話並且在訓練資料上反覆執行反向傳播優化演算法

’‘’

以上內容均摘自《tensorflow-實戰google深度學習框架》 一書

相關文章