神經網絡基礎及Keras入門

神經網絡定義
算法

人工神經網絡,簡稱神經網絡,在機器學習和認知科學領域,是一種模仿生物神經網絡(動物的中樞神經系統,特別是大腦)的結構和功能的數學模型或計算模型,用於對函數進行估計或近似。bash

爲了描述神經網絡,咱們先從最簡單的神經網絡講起,這個神經網絡僅由一個「神經元」構成,如下便是這個「神經元」的圖示:網絡



能夠看出,這個單一「神經元」的輸入-輸出映射關係其實就是一個邏輯迴歸(logistic regression)。dom


神經網絡模型機器學習

所謂神經網絡就是將許多個單一「神經元」聯結在一塊兒,這樣,一個「神經元」的輸出就能夠是另外一個「神經元」的輸入。例如,下圖就是一個簡單的神經網絡:函數



Keras實戰學習

使用keras實現以下網絡結構, 並訓練模型:優化


輸入值(x1,x2,x3)表明人的身高體重和年齡, 輸出值(y1,y2)ui

importnumpyasnp
# 總人數是1000, 一半是男生
n =1000
# 全部的身體指標數據都是標準化數據, 平均值0, 標準差1
tizhong = np.random.normal(size = n)
shengao = np.random.normal(size=n)
nianling = np.random.normal(size=n)
# 性別數據, 前500名學生是男生, 用數字1表示
gender = np.zeros(n)
gender[:500] =1
# 男生的體重比較重,因此讓男生的體重+1
tizhong[:500] +=1
# 男生的身高比較高, 因此讓男生的升高 + 1
shengao[:500] +=1
# 男生的年齡偏小, 因此讓男生年齡下降 1
nianling[:500] -=1
複製代碼

建立模型spa

fromkerasimportSequential
fromkeras.layersimportDense, Activation
model = Sequential()
# 只有一個神經元, 三個輸入數值
model.add(Dense(4, input_dim=3, kernel_initializer='random_normal', name="Dense1"))
# 激活函數使用softmax
model.add(Activation('relu', name="hidden"))
# 添加輸出層
model.add(Dense(2, input_dim=4, kernel_initializer='random_normal', name="Dense2"))
# 激活函數使用softmax
model.add(Activation('softmax', name="output"))
複製代碼

編譯模型

須要指定優化器和損失函數:

model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
複製代碼

訓練模型

# 轉換成one-hot格式
fromkerasimportutils
gender_one_hot = utils.to_categorical(gender, num_classes=2)
# 身體指標都放入一個矩陣data 
data = np.array([tizhong, shengao, nianling]).T
# 訓練模型
model.fit(data, gender_one_hot, epochs=10, batch_size=8)
複製代碼

輸出(stream):
Epoch1/10
1000/1000[==============================] -0s235us/step - loss:0.6743- acc:0.7180
Epoch2/10
1000/1000[==============================] -0s86us/step - loss:0.6162- acc:0.7310
Epoch3/10
1000/1000[==============================] -0s88us/step - loss:0.5592- acc:0.7570
Epoch4/10
1000/1000[==============================] -0s87us/step - loss:0.5162- acc:0.7680
Epoch5/10
1000/1000[==============================] -0s89us/step - loss:0.4867- acc:0.7770
Epoch6/10
1000/1000[==============================] -0s88us/step - loss:0.4663- acc:0.7830
Epoch7/10
1000/1000[==============================] -0s87us/step - loss:0.4539- acc:0.7890
Epoch8/10
1000/1000[==============================] -0s86us/step - loss:0.4469- acc:0.7920
Epoch9/10
1000/1000[==============================] -0s88us/step - loss:0.4431- acc:0.7940
Epoch10/10
1000/1000[==============================] -0s88us/step - loss:0.4407- acc:0.7900
輸出(plain):
複製代碼

進行預測

test_data = np.array([[0,0,0]])
probability = model.predict(test_data)
ifprobability[0,0]>0.5:
print('女生')
else:
print('男生')
###
輸出(stream):
女生
複製代碼

關鍵詞解釋

input_dim: 輸入的維度數

kernel_initializer: 數值初始化方法, 一般是正太分佈

batch_size: 一次訓練中, 樣本數據被分割成多個小份, 每一小份包含的樣本數叫作batch_size

epochs: 若是說將全部數據訓練一次叫作一輪的話。epochs決定了總共進行幾輪訓練。

optimizer: 優化器, 能夠理解爲求梯度的方法

loss: 損失函數, 能夠理解爲用於衡量估計值和觀察值之間的差距, 差距越小, loss越小

metrics: 相似loss, 只是metrics不參與梯度計算, 只是一個衡量算法準確性的指標, 分類模型就用accuracy


想了解更多Python知識,Python騷操做的朋友,能夠加羣私聊我哦,705673780

相關文章
相關標籤/搜索