DNN(全连接神经网络)
一.??
DNN網(wǎng)絡(luò)一般分為三層
1.輸入層
2.隱藏層
3.輸出層
簡單網(wǎng)絡(luò)如下:
?二.前向傳播
從第二層開始,每一個神經(jīng)元都會獲得它上一層所有神經(jīng)元的結(jié)果。即每一個 y = wx + b的值。
具體分析如下:
如此下去就會非常可能出現(xiàn)了一個問題------就是越靠后的神經(jīng)元獲得的y值會非常大,試想一下,如果這個數(shù)遠(yuǎn)遠(yuǎn)大于它前面神經(jīng)元的值,前面神經(jīng)元對整個網(wǎng)絡(luò)的表達(dá)就顯得毫無意義。所以我們在每創(chuàng)建一層網(wǎng)絡(luò)時就要多“y”進(jìn)行一次約束。
我們有很多選擇,但最好的方法就是運(yùn)用Sigmoid函數(shù)。它可以將每層網(wǎng)絡(luò)中的神經(jīng)元全部控制在0-1之間。
我們到最后輸出層每個神經(jīng)元就可以獲得一個y值。
利用tensorflow所構(gòu)建網(wǎng)絡(luò)的代碼如下:
model = Sequential([layers.Dense(256, activation=tf.nn.sigmoid),layers.Dense(128, activation=tf.nn.sigmoid),layers.Dense(64, activation=tf.nn.sigmoid),layers.Dense(32, activation=tf.nn.sigmoid),layers.Dense(10) ])三.反向傳播(數(shù)據(jù)一層層傳播來,我們就一層層給它們每個反饋)
寫到這里,我覺的我們可以先返回到我們出發(fā)點(diǎn),我們?yōu)槭裁聪胍罱ㄒ粋€網(wǎng)絡(luò),我相信大部分人的出發(fā)點(diǎn)就是想要網(wǎng)絡(luò)對未知物體進(jìn)行預(yù)測。反向傳播所做的就是讓每一個神經(jīng)元都擁有一個w,h值。這樣我們在傳進(jìn)一個新的數(shù)據(jù)時,我們可以將他準(zhǔn)確的預(yù)測。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Here we go!!!!!
訓(xùn)練的目的是希望神經(jīng)網(wǎng)絡(luò)的輸出和真實(shí)數(shù)據(jù)的輸出"一樣",但是在"一樣"之前,模型輸出和真實(shí)數(shù)據(jù)都是存在一定的差異,我們把這個"差異"作這樣的一個參數(shù)ee代表誤差的意思,那么模型輸出加上誤差之后就等于真實(shí)標(biāo)簽了,作:y=wx+b+e。我們把每次的失誤都加起來。為了防止e值的正負(fù)抵消。我們?nèi)∑淦椒街怠_@樣我們就可以獲得一個損失函數(shù)。如下:
? ????????????????????????????????
我們將損失函數(shù)(Loss)展開:
?根據(jù)展開式作圖:
??????????????????? ?
?損失值顧名思義,它就是誤差,我們肯定希望它越小越好,所以我們接下來想做的就是取得的新w值與b值使隨時函數(shù)取得的值越小越好。專家們名其曰:梯度下降。
數(shù)學(xué)公式如下:
我們可以利用此公式延申到我們計(jì)算w,b上
?寫出總式子:? ? ? ??????????????????????????????
?帶入loss函數(shù):
?利用復(fù)合函數(shù):
?最終可以獲得:
這樣我們就可以獲得一個線性關(guān)系:
?利用這種鏈?zhǔn)絺鞑?#xff0c;我們就可以更新我們的每個神經(jīng)元。
?利用tensorFlow所實(shí)現(xiàn)的反向傳播如下:
logits = model(x)y_onehot = tf.one_hot(y, depth=10)# 兩種計(jì)算誤差函數(shù)的方法loss = tf.reduce_mean(tf.losses.MSE(y_onehot, logits))loss2 = tf.losses.categorical_crossentropy(y_onehot, logits, from_logits=True)loss2 = tf.reduce_mean(loss2)loss_meter.update_state(loss)# 分別對w, b求偏導(dǎo)grads = tape.gradient(loss2, model.trainable_variables)# 將所有參數(shù)進(jìn)行原地更新。即w‘ = w - lr*gradoptimizer.apply_gradients(zip(grads, model.trainable_variables))?五:總結(jié)
全連接網(wǎng)絡(luò)可以經(jīng)過大量數(shù)據(jù)的訓(xùn)練之后,對一個未知事物進(jìn)行預(yù)測。是深度學(xué)習(xí)的基礎(chǔ)。如有不足之處,還望指正。文章有所參考,但僅為少數(shù)公理。
總結(jié)
以上是生活随笔為你收集整理的DNN(全连接神经网络)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 做路由器系统下载文件,用Li
- 下一篇: 李飞飞:我怎样走上AI研究之路