神經網路基礎及Keras入門

2021-09-24 07:41:36 字數 3701 閱讀 7617

神經網路定義

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

為了描述神經網路,我們先從最簡單的神經網路講起,這個神經網路僅由乙個「神經元」構成,以下即是這個「神經元」的圖示:

可以看出,這個單一「神經元」的輸入-輸出對映關係其實就是乙個邏輯回歸(logistic regression)。

神經網路模型

所謂神經網路就是將許多個單一「神經元」聯結在一起,這樣,乙個「神經元」的輸出就可以是另乙個「神經元」的輸入。例如,下圖就是乙個簡單的神經網路:

keras實戰

使用keras實現如下網路結構, 並訓練模型:

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

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

複製**

建立模型

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

神經網路入門基礎文章

1 神經網路基本原理介紹 1 深度神經網路 dnn 模型與前向傳播演算法 2 深度神經網路 dnn 反向傳播演算法 bp 3 深度神經網路 dnn 損失函式和啟用函式的選擇 4 深度神經網路訓練之梯度下降法 5 深度神經網路 dnn 的正則化 機器學習之正則化 補充 神經網路中的正則化是為了訓練的模...

Keras 神經網路構建學習

keras 是簡單易用 高效強大的神經網路庫,底層計算可基於 tensorflow 或 theano 平台實現。本篇將詳細介紹 keras 模型構建的具體步驟。通過閱讀本篇內容您將了解到 keras 模型構建的主要步驟 keras 神經網路搭建的一般過程 keras 模型構建主要包括5個步驟 定義 ...

神經網路的keras實現

keras是構建在tensorflow基礎上的python第三方庫,專門用於神經網路的構建與計算,同時還整合了scikit learn庫,使得可以在神經網路的構建中運用機器學習的方法。現在就用keras來構建之前構建過的神經網路。實現 首先匯入所需要的包 from keras.models impo...