tensorflow 框架

神經網絡的實現過程:
1、準備數據集,提取特徵,作爲輸入餵給神經網絡(Neural Network,NN)
2、搭建 NN 結構,從輸入到輸出(先搭建計算圖,再用會話執行)
( NN 前向傳播算法 --> 計算輸出)
3、大量特徵數據餵給 NN,迭代優化 NN 參數
( NN 反向傳播算法 --> 優化參數訓練模型)
4、使用訓練好的模型預測和分類

1. 前向傳播

#coding:utf-8
import tensorflow as tf

print("============兩層簡單神經網絡=========== ")
#定義輸入和參數

#定義常量X
#x = tf.constant([[0.7,0.5]])
#用placeholder定義輸入(sess.run可以喂多組數據)
x = tf.placeholder(tf.float32,shape=(None,2))
w1 = tf.Variable(tf.random_normal([2,3],stddev = 1,seed = 1))
w2 = tf.Variable(tf.random_normal([3,1],stddev = 1,seed = 1))

#定義前向傳播過程,只搭建了網絡,並沒有計算
a = tf.matmul(x,w1)
y = tf.matmul(a,w2)

#會話計算結果
with tf.Session() as sess:
    #彙總所有待優化的參數
    init_op = tf.global_variables_initializer()
    #計算所有優化的參數
    sess.run(init_op)
    print("w1:\n",sess.run(w1))
    print("w2:\n",sess.run(w2))
    #計算最終結果 y 值
    #x爲常量值時的輸出結果
    #print("兩層簡單網絡計算結果爲:\n y = ",sess.run(y))
    #用placeholder定義x作爲輸入,sess.run喂多組數據的輸出結果
    print("喂入多組數據的結果:\n",sess.run(y,feed_dict = {x: [[0.7,0.5],[0.2,0.3],[0.3,0.4],[0.4,0.5]]}))

2. 反向傳播

#coding:utf-8
#導入模塊,生成模擬數據集
import tensorflow as tf
import numpy as np
#一次不可過大
BATCH_SIZE = 8
seed = 23455

#基於seed 產生隨機數
rng = np.random.RandomState(seed)
#隨機數返回32行2列的矩陣,特徵爲體積和體重 作爲輸入的數據集
X = rng.rand(32,2)
#僞造每組特徵輸入的標籤
Y = [[int(x0 + x1 < 1 )] for (x0,x1) in X]
#打印數據集
print("X:\n",X)
#打印標籤
print("Y:\n",Y)

#搭建神經網絡

#1. 定義輸入,參數和輸出,定義前向傳播過程
x = tf.placeholder(tf.float32,shape = (None,2))
y_ = tf.placeholder(tf.float32,shape = (None,1))

#隨機生成原始權重
w1 = tf.Variable(tf.random_normal([2,3],stddev = 1,seed = 1))
w2 = tf.Variable(tf.random_normal([3,1],stddev = 1,seed = 1))

a = tf.matmul(x,w1)
y = tf.matmul(a,w2)

#定義損失函數與反向傳播方法
loss = tf.reduce_mean(tf.square(y - y_)) #均房誤差
#選擇優化方法
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss) #梯度下降
#train_step = tf.train.MomentumOptimizer(0.001,0.9).minimize(loss)
#train_step = tf.train.AdamOptimizer(0.001).minimize(loss)

#3 生成會話,訓練 STEP 輪
with tf.Session() as sess:
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    #輸出未經訓練的參數值
    print("w1:\n",sess.run(w1))
    print("w2:\n",sess.run(w2))
    print("\n")

    # 訓練模型
    STEP = 3000 #訓練3000輪
    for i in range(STEP):
        start = (i*BATCH_SIZE)%32 #每組喂8組數據
        end = start + BATCH_SIZE
        sess.run(train_step,feed_dict = {x:X[start:end],y_:Y[start:end]})
        #每500次打印一次參數信息
        if i % 500 == 0:
            total_loss = sess.run(loss,feed_dict = {x:X,y_:Y})
            print("經過 %d 輪訓練,損失數據爲:%g" %(i,total_loss))

    #輸出訓練後的權重
    print("\n")
    print("w1:\n",sess.run(w1))
    print("w2:\n",sess.run(w2))

關於tensorflow學習教程均來自 mooc 課程:人工智能實踐:tensorflow筆記 mooc 課程

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