reference:
這篇文章主要講怎樣建造乙個完整的神經網路,包括新增神經層,計算誤差,訓練步驟
我們知道乙個神經網路可能包含很多個隱藏層,所以如果我們定義乙個新增層函式,在後面如果需要增加神經層就只需要呼叫我們定義的新增層函式就可以了。神經層裡常見的引數通常有:weights,biases和激勵函式
首先匯入tensorflow模組和numpy,然後定義新增神經層函式def add_layer(),這裡有四個引數,輸入值,輸入值的大小,輸出值的大小,激勵函式,這裡可以設定激勵函式預設為none。
import tensorflow as tf
defadd_layer
(inputs, in_size, out_size, activation_function=none):
接下來我們開始定義weights和biases,這兩個都需要我們生成初始引數,而後經過訓練來調整引數。這裡的weights定義為乙個in_size行,out_size列的隨機變數(normal distribution)矩陣。
weights = tf.variable(tf.random_uniform([in_size, out_size]))
在機器學習中,biases的推薦值不為0,所以我們在0向量的基礎上加0.1
biases = tf.variable(tf.zeros([1, out_size]) + 0.1)
接下來我們定義神經網路未啟用的值,定義為wx_plus_b
wx_plus_b =tf.matmul(input, weights) + biases
當激勵函式為預設值none時,此時為liner function,所以直接輸出wx_plus_b。當激勵函式存在時,需要將wx_plus_b傳入的激勵函式中然後輸出並且返回輸出結果。
if activation_function is
none:
outputs = wx_plus_b
else:
outputs = activation_function(wx_plus_b)
return outputs
這樣我們的新增層函式就定義好了。
要對神經網路進行訓練就一定要有輸入的資料集,現在我們來定義輸入資料,這裡乙個值域為-1到+1期間的300個資料,為300*1的形式,
x_data = np.linspace(-1, 1, 300)[:, np.newaxis]
然後定義乙個與x_data形式一樣的噪音點,使得我們進行訓練的資料更像是真實的資料
noise = np.random.normal(0, 0.05, x_data.shape)
定義y_data,假設為x_data的平方減去噪音點
noise = np.random.normal(0, 0.05, x_data.shape)
定義placeholder, 引數中none表示輸入多少個樣本都可以,x_data的屬性為1,所以輸出也為1
xs = tf.placeholder(tf.float32, [none, 1])
ys = tf.placeholder(tf.float32, [none, 1])
我們定義乙個最簡單的神經網路,乙個輸入層,乙個隱藏層和乙個輸出層,隱藏層
我們假設只給10個神經元,輸入層是有多少個屬性就有多少個神經元,我們的x_data只有乙個屬性,所以只有乙個神經元,輸出層與輸入層是一樣的,輸入層有多少個神經元輸出層就有多少個。這裡激勵函式用的是卷積神經網路中最常用的relu。
l1 = add_layer(xs, 1, 10, activation_function=tf.nn
.relu)
輸出層接受到的data是l1輸出的,inputsize為隱藏層的size,輸出層的size是1
prediction =add_layer(l1, 10, 1, activation_function=none)
計算**值與真實值的差異。
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),
reduction_indices=[1]))
接下來就可以訓練我們的資料了,使神經網路從我們的樣本點通過誤差來學習。這裡的優化函式使用gd去減小誤差,學習率假設為0.1,通常學習率都為小於1的數
train_step = tf.train
.gradientdescentoptimizer(0.1).minimize(loss)
對所有的變數初始化
init =tf.global_variables_initializer()
定義session
sess = tf.session()
sess.run(init)
最後讓我們的神經網路訓練1000次,每隔50次列印出來loss
sess.run(train_step, feed_dict=)
if i % 50 == 0:
print(sess.run(loss, feed_dict=))
這樣乙個簡單的神經網路就完成了。
這裡是我們的執行結果,從結果中可以看出開始loss很大,經過訓練loss逐漸減小,到最後loss只有0.0013567087已經很接近真實值了。
用tensorflow搭建乙個簡單的神經網路
在神經網路板塊斷斷續續進行了4個月的摸索,逐漸形成了自己對這個領域的認識,寫成部落格一是為了分享自己的觀點,希望不足之處能得到指正 二是作為讀書周記,能督促自己能不要停下來更新部落格,持續學習。好了以下就是我的第一章,用tensorflow搭建乙個簡易的 沒有隱藏層的 神經網路。用tensorflo...
第乙個tensorflow程式
個人部落格 最近alphago和alphazero的出現,預示著2017年成為人工智慧元年,人工智慧逐漸進入我們的生活和工作的方方面面,如在工作中,阿里巴巴雙十一中,出現了 千人千面 智慧型推薦系統,魯班ai設計師,小蜜機械人,idc智慧型巡檢機械人,還有京東的無人倉庫等。這些都讓我覺得人工智慧越來...
第乙個TensorFlow程式
tensorflow的執行方式分為如下4步 1 載入資料及定義超引數 2 構建網路 3 訓練模型 4 評估模型和進行 import tensorflow as tf import numpy as np 構造滿足一元二次方程的函式 x data np.linspace 1,1,300 np.newa...