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