深度學習入門 基於python理論和實踐讀書筆記(二)

第三章 神經網絡 一二節

神經網絡示意圖

=
做左邊一列叫做輸入層,該書中也叫做第0層,從左往右一次是第1層,第二層。中間的叫做中間層或者是隱藏層,最右邊一列叫做輸出層。
在感知機中輸出與輸入對應這樣子一個式子
b爲偏置
把偏加入神經元的圖中,則我們加入一個神經元,如下圖
在這裏插入圖片描述
爲了讓輸入輸出看上去更加簡潔,把之前的式子改爲
在這裏插入圖片描述
在這裏插入圖片描述

激活函數

上面的h(x)函數,將輸入信號的總和轉化爲輸出信號。這個函數一般被稱爲激活函數。
將激活函數分得更加細一點,變成兩個式子。
在這裏插入圖片描述

那麼之前的示意圖可以變成這樣子
在這裏插入圖片描述

sigmoid函數

sigmoid函數的表達式
在這裏插入圖片描述
其中exp(−x)表示e-x,sigmoid函數的值域在0到1之間,是一條s型的曲線。

階躍函數

實現階躍函數的代碼如下

import numpy as np
def step_function(x):
    y = x>0
    return  y.astype(np.int)

y = x>0 這句代碼,如果x是一個數組,執行後的結果就是大於0的元素對應y這個數組就是true反之則爲false.如x=[-1,1,4,-2],則y=[false,true,true,false]。然後y.astype(),.astype就是其他語言裏面的數據類型的轉化,把y轉化爲括號裏面的類型。如中國地方括號裏面寫的是int類型,那麼true就會變成1,false就會轉化爲0。
顯示階躍函數和sigmoid函數的圖形的python代碼

import numpy as np
import matplotlib.pylab as plt
def step_function(x):
    return np.array(x > 0, dtype=np.int)
def sigmoid(x):
    return 1/(1+np.exp(-x))
x=np.arange(-5.0,5.0,0.1)
y=step_function(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)#指定y軸的範圍
plt.show()

x=np.arange(-5.0,5.0,0.1)
y=sigmoid(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)#指定y軸的範圍
plt.show()

    np.arang(-5.0,5.0,0.1)表示x軸的範圍在-5到5,以0.1爲一個單位,生成數組([-5.0, -4.9, …, 4.9])

階躍函數和sigmoid函數圖形的對比
在這裏插入圖片描述       階躍函數和sigmoid函數的不同點是,sigmoid是一條平滑的曲線,輸出隨着輸入發生連續性的變化,二階躍函數也0爲界限輸出發生急劇的變化,並且階躍函數的值域只能返回1或者是0,而sigmoid函數返回值是從0到1連續的值域。
      階躍函數和sigmoid函數的相同點是,他們的輸出信號的值和1之間。並且都是非線性函數。
      神經網絡的激活函數必須是非線性的,應爲如果激活函數是線性的話,那麼我們加深網絡的層數就沒有意義了。

ReLU函數

函數的式子是這樣子的
在這裏插入圖片描述
python實現

def relu(x):
    return np.maxinum(0,x)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章