tensorflow創建神經網絡

# 添加神經層
# add layer
# 層包括weights,biases,激勵函數
import tensorflow as tf
import numpy as np

# 添加層,有輸入,輸入輸出大小,激勵函數(默認是為None,則是線性函數)
def add_layer(inputs,in_size,out_size,activation_function=None):
    Weights = tf.Variable(tf.random_normal([in_size,out_size])) # 權重 用隨機變量會比全部為0好很多 ,這里未變量矩陣
    biases = tf.Variable(tf.zeros([1,out_size]) + 0.1) # biases不是矩陣,是類似列表的東西,在激勵學習中,biases推薦不為0
    Wx_plus_b = tf.matmul(inputs,Weights) + biases # 矩陣乘法 這是預測的值,還沒被激活
    if activation_function is None:
        outputs = Wx_plus_b # 如果是線性函數則不需要添加激勵函數(因為激勵函數是非線性方程)
    else:
        outputs = activation_function(Wx_plus_b) # 把Wx_plus_b激活
    return outputs

x_data = np.linspace(-1,1,300)[:,np.newaxis] # 建立-1到1的區間有300個單位,添加維度
noise = np.random.normal(0,0.05,x_data.shape) # 添加噪點,讓它更像真實數據,方差是0.05,跟x_data一樣的格式
y_data = np.square(x_data) - 0.5 + noise # 構建y_data為x_data的平方

xs = tf.placeholder(tf.float32,[None,1]) # None表示輸出多少都ok
ys = tf.placeholder(tf.float32,[None,1])

# 建造第一層layer (輸入層,隱藏層,輸出層) 典型的神經網絡,三層神經 ,只有一個屬性, 一個神經元
# 定義隱藏層
layer1 = add_layer(xs,1,10,activation_function=tf.nn.relu) # 輸入一個參數,隱藏層有10個神經元,使用tensorflow自帶的激勵方程
prediction = add_layer(layer1,10,1,activation_function=None) # 輸出層

loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1])) # 算出prediction跟真實值的區別,求和后再求平均值

# 練習,提升誤差
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) # 學習效率(0.1), 減少誤差, 用小步訓練更能體現訓練的效率

init = tf.initialize_all_variables() # 初始化所有變量
sess = tf.Session()
sess.run(init) # 運算

for i in range(1000):
    sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
    # 輸出結果,如果誤差不斷減少則效率提升
    if i % 50 == 0:
        print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))

輸出

0.587287
0.00809391
0.00612073
0.00531567
0.0048084
0.00443714
0.00415135
0.00392712
0.00374785
0.00360647
0.00348928
0.0033773
0.00327797
0.00318462
0.00310172
0.00303527
0.00297711
0.00292976
0.00288618
0.00284872

誤差越來越少

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 引言 機器學習欄目記錄我在學習Machine Learning過程的一些心得筆記,涵蓋線性回歸、邏輯回歸、Soft...
    hfk閱讀 4,399評論 4 18
  • David Rumelhart 和 J.McClelland 于1985年提出了BP網絡的誤差反向后傳BP(Bac...
    東皇Amrzs閱讀 74,404評論 13 59
  • 1. 章節主要內容 今天讓我們來好好理解一下機器學習中的神經網絡算法吧,其中多隱含層的神經網絡算法就是目前最熱的深...
    閃電隨筆閱讀 2,927評論 1 7
  • 萬稅: 人生不過一皮囊, 為避風雨需住房, 房改房稅接踵來, 卻讓黎民總受傷。 先是勞動最光榮, 后為祖國白碌忙,...
    云之憾閱讀 132評論 0 0
  • final final關鍵字又被稱為完結器,有終結的意思。 final能聲明類、方法、變量。 使用final聲明的...
    wiyee閱讀 273評論 0 0