神经网络(补充)(第五章)
文章目錄
- 神經(jīng)網(wǎng)絡(luò)(補(bǔ)充)(第五章)
- 感知機(jī)
- 與門
- 與非門
- 或門
- 感知機(jī)的局限:異或門
- 神經(jīng)網(wǎng)絡(luò)開始
- 激活函數(shù)引入
- 階躍函數(shù)
- sigmoid函數(shù)
- sigmoid函數(shù)與階躍函數(shù)的比較
- Relu函數(shù)
- 三層神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)
- 代碼總結(jié)
- 輸出層的激活函數(shù)softmax
神經(jīng)網(wǎng)絡(luò)(補(bǔ)充)(第五章)
感知機(jī)
感知機(jī)是神經(jīng)網(wǎng)絡(luò)(深度學(xué)習(xí))的起源算法,所以我們從感知機(jī)起步,進(jìn)入深度學(xué)習(xí)的世界。
主要使用的Python庫(kù):
-
感知機(jī)接收多個(gè)輸入信號(hào),輸出一個(gè)信號(hào)
-
水流向前流動(dòng),向前方輸送水
-
電流向前流動(dòng),向前方輸送電子
-
感知機(jī)的信號(hào)也會(huì)向前流動(dòng),向前方輸送信息
-
不同的是,感知機(jī)的信號(hào)只有“流”和“不流”兩種情況,如分別用1和0表示
示意圖如下:
與門
與門(AND gate)的真值表如下:
| 0 | 0 | 0 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 1 | 1 |
思考:如何用感知機(jī)實(shí)現(xiàn)與門呢?什么樣的權(quán)重與閾值是合適的呢?
代碼實(shí)現(xiàn):
使用numpy:
與非門
與非門(NAND gate)顛倒了與門的輸出,起英文NAND就是Not AND 的
其真值表如下所示:
| 0 | 0 | 1 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 1 | 0 |
只要把與門的符號(hào)取反,即可實(shí)現(xiàn)與非門
import numpy as npdef NAND(x1,x2):x = np.array([x1,x2])w = np.array([-0.5,-0.5])b = 0.7tmp = np.sum(w*x) + bif tmp <= 0:return 0else:return 1或門
其真值表如下:
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 1 | 1 |
感知機(jī)的局限:異或門
到這里,我們已經(jīng)知道,使用感知機(jī)可以實(shí)現(xiàn)與門、與非門、或門三中邏輯電路
現(xiàn)在我們來(lái)思考一下異或門(XOR gate)
異或門的真值表如下:
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 1 | 0 |
下面我們用多層感知機(jī)來(lái)實(shí)現(xiàn)異或門:
總結(jié):先得到與非門和或門,最后用與門即可得到異或門的輸出。
異或門代碼:(調(diào)用上方已有的方法)
好了,感知機(jī)已經(jīng)基本上理解,接下來(lái)神經(jīng)網(wǎng)絡(luò)開始!
神經(jīng)網(wǎng)絡(luò)開始
激活函數(shù)引入
階躍函數(shù)
階躍函數(shù)代碼實(shí)現(xiàn):
修改后的代碼:
調(diào)用:
import numpy as npx = np.array([-1.0,1.0,2.0]) x array([-1.0,1.0,2.0]) y = x > 0 y array([False,True,True]) y_int = y.astype(np.int) y_int array([0,1,1])#調(diào)用: step_function2(x) array([0,1,1])看一下階躍函數(shù)的圖像:
import numpy as np import matplotlib.pylab as pltdef step_function(x):y = x > 0return y.astype(np.int)x = np.arange(-5.0,5.0,0.1) #x的取值[-5,5),精度0.1,你可以自己查看x是什么 y = step_function(x) plt.plot(x,y) plt.ylim(-0.1,1.1) #指定y軸的范圍 plt.show()
如果將激活函數(shù)從階躍函數(shù)切換成其他函數(shù),就可以進(jìn)入神經(jīng)網(wǎng)絡(luò)的世界了!
sigmoid函數(shù)
sigmoid函數(shù)的實(shí)現(xiàn):
測(cè)試能不能適用于數(shù)組:
import numpy as np x = np.array([-1.0,1.0,2.0]) print(x) sigmoid(x)#輸出: [-1.,1.,2.] array([0.26894142,0.73105858,0.88079708])
sigmoid函數(shù)的圖像:
sigmoid函數(shù)與階躍函數(shù)的比較
代碼示例:
Relu函數(shù)
relu函數(shù)的實(shí)現(xiàn):
relu函數(shù)的圖像:
x = np.arange(-5.0,5.0,0.1) y = relu(x)plt.plot(x,y) plt.ylim(-1,6) plt.show()
三層神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)
從第0層到第1層:(即輸入層到第一層)
使用numpy多維數(shù)組來(lái)實(shí)現(xiàn):
位置如下圖紅坨坨圈起來(lái)的部分:
從第1層到第2層:
從第2層到第3層:(即第2層到輸出層的信號(hào)傳遞)
與之前類似,只不過(guò)激活函數(shù)有所不同
代碼總結(jié)
輸出層的激活函數(shù)softmax
代碼實(shí)現(xiàn):
將softmaxt整合成一個(gè)函數(shù):
def softmax(a):exp_a = np.exp(a)sum_exp_a = np.sum(exp_a)y = exp_a/sum_exp_areturn y
圖片來(lái)自另一個(gè)博客:https://blog.csdn.net/weixin_44478378/article/details/100569046
重新定義一下函數(shù):
比較一下二分類與多分類:
ok,到這里先結(jié)束一下吧,這里補(bǔ)充的比較基礎(chǔ),是看的b站一學(xué)習(xí)大佬的深度學(xué)習(xí)入門視頻做的學(xué)習(xí)筆記,視頻鏈接如下,感謝大佬的講解:
https://www.bilibili.com/video/BV12t411N748
總結(jié)
以上是生活随笔為你收集整理的神经网络(补充)(第五章)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 西瓜书学习记录-神经网络(第五章)
- 下一篇: 神经网络(第五章补充)