熬過了上一篇漫長(zhǎng)的代碼,稍微解開了一丟丟疑惑,使得抽象的BP有一點(diǎn)具體化了,可是還是有好多細(xì)節(jié)的東西沒有講清楚,比如,為什么要用激活函數(shù)?為什么隨機(jī)梯度下降沒有提到?下面我們來一一解開疑惑。
首先是為什么要使用激活函數(shù)?這要回顧一下我們?cè)趯W(xué)習(xí)BP之前學(xué)習(xí)的感知器模型。它模仿的是人類體內(nèi)的信號(hào)傳導(dǎo)的過程,當(dāng)信號(hào)達(dá)到一定的閾值時(shí),就可以繼續(xù)向后傳播。
那這個(gè)感知器模型和BP網(wǎng)絡(luò)有什么關(guān)系呢?在我們所看到的BP網(wǎng)絡(luò)的結(jié)構(gòu)圖中,其實(shí)是被簡(jiǎn)化了的,下面小編畫了一個(gè)邏輯更清晰一點(diǎn)的圖:
這樣我們就可以看出來,其實(shí)BP網(wǎng)絡(luò)是由一個(gè)一個(gè)的感知器組成,也就構(gòu)成了一個(gè)真正的神經(jīng)網(wǎng)絡(luò),自然就能理解為什么要使用激活函數(shù)了。
接下來我們來看一下TensorFlow實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò)到底有多簡(jiǎn)單!
#構(gòu)建一個(gè)結(jié)構(gòu)為[10,15,1]的BP神經(jīng)網(wǎng)絡(luò)
model = tf.keras.Sequential([tf.keras.layers.Dense(15,activation='relu',input_shape=(10,)),
tf.keras.layers.Dense(1)])
model.summary() #顯示網(wǎng)絡(luò)結(jié)構(gòu)
model.compile(optimizer='SGD',loss='mse') #定義優(yōu)化方法為隨機(jī)梯度下降,損失函數(shù)為mse
#x->訓(xùn)練集,y——>bia標(biāo)簽,epochs=10000訓(xùn)練的次數(shù),validation_data=(test_x,test_y)——>驗(yàn)證集
history = model.fit(x,y,epochs=10000,validation_data=(test_x,test_y))
上面就是一個(gè)最簡(jiǎn)單的BP網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu),小編還準(zhǔn)備好了完整的通用框架代碼,不用總是修改隱藏層,可以直接使用哦!公眾號(hào)發(fā)送“BP源碼”就可以獲取!是不是非常驚訝!昨天的百行代碼完全消失了,這短短幾行代碼就可實(shí)現(xiàn)一個(gè)BP網(wǎng)絡(luò)。
這里解釋一下validation_data,這是驗(yàn)證集,作用和測(cè)試集是一樣的,只不過驗(yàn)證集是在訓(xùn)練過程中對(duì)模型進(jìn)行測(cè)試,這樣方便觀察模型的準(zhǔn)確性。loss函數(shù)的作用是計(jì)算模型的預(yù)測(cè)誤差,也就是是衡量模型的準(zhǔn)確度,常用的誤差函數(shù)還有mse,mae,rmse,mape等等,模型中有很多誤差函數(shù)不能直接調(diào)用,但是可以自己定義。
SGD就是我們所說的隨機(jī)梯度下降算法了,但是現(xiàn)在我們普遍認(rèn)為“adam”是目前最好的優(yōu)化算法,當(dāng)然這也根據(jù)不同的神經(jīng)網(wǎng)絡(luò)做不同的選擇。想要研究理論的讀者可以去查一查資料,小編作為實(shí)戰(zhàn)派就不對(duì)理論做過多的闡述了!
另外再列出來同樣強(qiáng)大的pytorch框架的代碼,大家可以自行選取。
class Model(nn.Module):
def __init__(self):
super().__init__()
self.fc = nn.Sequential(
nn.Linear(10, 15),
nn.ReLU(),
nn.Dropout(), #防止過度擬合,TensorFlow也有
nn.Linear(15, 2)
)
def forward(self, x):
x = self.fc(x)
return x
關(guān)于選擇哪一個(gè)框架的問題,在TensorFlow2.0出現(xiàn)之前,小編會(huì)推薦pytorch,現(xiàn)在的TensorFlow2.0和pytorch代碼風(fēng)格已經(jīng)越來越接近了,但是TensorFlow2.0可以支持的平臺(tái)更多,所以這里推薦TensorFlow2.0。
有什么問題,歡迎大家留言討論!
-
信號(hào)
+關(guān)注
關(guān)注
11文章
2837瀏覽量
77831 -
閾值
+關(guān)注
關(guān)注
0文章
123瀏覽量
18698 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4366瀏覽量
64028 -
BP網(wǎng)絡(luò)
+關(guān)注
關(guān)注
0文章
27瀏覽量
22316 -
tensorflow
+關(guān)注
關(guān)注
13文章
330瀏覽量
60992
發(fā)布評(píng)論請(qǐng)先 登錄
求利用LABVIEW 實(shí)現(xiàn)bp神經(jīng)網(wǎng)絡(luò)的程序
labview BP神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)
深度學(xué)習(xí)框架TensorFlow&TensorFlow-GPU詳解
高階API構(gòu)建模型和數(shù)據(jù)集使用
TensorFlow的特點(diǎn)和基本的操作方式
TensorFlow實(shí)戰(zhàn)之深度學(xué)習(xí)框架的對(duì)比

TensorFlow的框架結(jié)構(gòu)解析

機(jī)器學(xué)習(xí)框架Tensorflow 2.0的這些新設(shè)計(jì)你了解多少
TensorFlow2.0終于問世,Alpha版可以搶先體驗(yàn)

基于TensorFlow框架搭建卷積神經(jīng)網(wǎng)絡(luò)的電池片缺陷識(shí)別研究

IJCAI 2019上的一個(gè)TensorFlow2.0實(shí)操教程,117頁P(yáng)PT干貨分享
tensorflow能做什么_tensorflow2.0和1.0區(qū)別
神經(jīng)網(wǎng)絡(luò)原理簡(jiǎn)述—卷積Op求導(dǎo)

評(píng)論