Keras 是一個用於定義和訓練神經網絡的高階API。簡單的說,Keras 是對 TensorFlow 等深度學習框架的更高一層的封裝,以提供更加優雅,用戶友好的接口設計。所以,Keras 不能獨立運行,須要底層框架的支持,這個底層框架能夠是 TensorFlow, CNTK, Theano。推薦使用 TensorFlow , 本文也是以 TensorFlow 爲例。python
在人工智能領域,一般所說的「神經網絡」,完整說法應該是「人工神經網絡」。它是人類爲了使機器具有人類的智力行爲,使用計算機算法模擬人類神經系統,開發的一種機器學習技術。人類的神經系統是由一個個神經元彼此相連,構成的複雜網絡系統。算法
下圖是大腦神經元結構,神經元從它的多個樹突(DENDRITES)接收輸入(神經衝動),通過處理,判斷是否經過軸突(AXON)輸出神經衝動。bash
正如神經元是構成大腦神經系統的基本單元,感知器(Perceptron)是構人工神經網絡的基本單元。它接收多個輸入(),經過線性函數和激活函數(Step Function 是激活函數的一種),獲得輸出。微信
線性函數:網絡
其中, 和 爲向量,, ,所以也能夠展開以下:架構
Step Function 是階越函數,在神經網絡中,一般稱這類函數爲激活函數:框架
神經網絡的數學原理是線性代數。在單個感知器中,輸入到輸出,實際就是,輸入向量 與權重向量 的點積,再加上一個偏置單元 (標量)。爲了表示的一致性,一般也會將偏置單元看做是,輸入爲 1 , 權重爲 的特殊單元。機器學習
1 個感知器對應 1 個輸出,多個具備不一樣權重向量感知器,接收相同輸入向量,就對應多個輸出,這樣一組感知器就構成神經網絡的層(layer)。相比於單個感知器,層能接收多個輸入,並獲得多個輸出,而權重再也不以向量表示,取而代之爲矩陣。所以,層的數學模型就是,輸入向量乘以權重矩陣,獲得輸出向量。函數
所謂的深度學習或深度神經網絡,就是由多個感知層首尾相連,即前一個層的輸出對應後一個層的輸入,構成的多層感知器。其中,第1層也叫輸入層(Input Layer),最後1層也叫輸出層(Output Layer),中間層也叫隱藏層(Hidden Layer)。學習
在對深度神經網絡有個基本概念後,接下來使用 Keras 搭建一個深度神經網絡模型。在此以前,須要先安裝相關軟件和 python 包。
若是還沒安裝 Anaconda ,建議先安裝,下載地址:www.anaconda.com/distributio… 。
確認已經安裝了 Anaconda 後,打開命令行終端,輸入以下命令,建立環境並安裝相關 python 包。
conda create -n DNN python=3.6
conda activate DNN
pip install --upgrade pip
pip install numpy pandas matplotlib jupyter notebook tensorflow Keras
pip install seaborn
pip freeze | grep -Ei "numpy|pandas|matplotlib|tensorflow|Keras"
複製代碼
out:
Keras==2.3.0
Keras-Applications==1.0.8
Keras-Preprocessing==1.1.0
matplotlib==3.1.1
numpy==1.17.2
pandas==0.25.1
tensorflow==1.14.0
tensorflow-estimator==1.14.0
複製代碼
Keras 提供兩種建立神經網絡的方法: 序列化模型(Sequential model),函數式API(Functional API)。
下面分別使用兩種方法,建立最簡單的3層神經網絡模型,1個輸入層,1個隱藏層和1個輸出層,其中輸入大小(shape)爲 100, 輸出大小爲 10,隱藏層大小爲 32。
from keras.models import Sequential
from keras.layers.core import Dense
複製代碼
建立序列模型:
model = Sequential()
複製代碼
給模型添加層。Keras 將根據第1層自動推斷後續全部層的形狀。這意味着,你只需爲第1層設置輸入維度。
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(10, activation='softmax'))
複製代碼
編譯模型,指定損失函數,優化程序和評估指。
model.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
複製代碼
查看模型架構:
model.summary()
複製代碼
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_1 (Dense) (None, 32) 3232
_________________________________________________________________
dense_2 (Dense) (None, 10) 330
=================================================================
Total params: 3,562
Trainable params: 3,562
Non-trainable params: 0
_________________________________________________________________
複製代碼
Keras 函數式API用來定義結構更爲複雜的模型。例如多輸出模型,有向無環圖或具備共享層的模型。
from keras.layers import Input, Dense
from keras.models import Model
複製代碼
# 返回一個張量
inputs = Input(shape=(100, ))
# 給模型層實例,傳入輸入張量,返回一個輸出張量
output_1 = Dense(32, activation='relu')(inputs)
outputs = Dense(10, activation='softmax')(output_1)
# 根據輸入和輸出,建立一個包含一個輸入層,一個隱藏層和一個輸出層的模型
model = Model(inputs=inputs, outputs=outputs)
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 查看模型結構
model.summary()
複製代碼
Model: "model_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, 100) 0
_________________________________________________________________
dense_3 (Dense) (None, 32) 3232
_________________________________________________________________
dense_4 (Dense) (None, 10) 330
=================================================================
Total params: 3,562
Trainable params: 3,562
Non-trainable params: 0
_________________________________________________________________
複製代碼
本文從初學者角度,介紹深度神經網絡的基本概念和數學原理,而後經過使用很是流行深度學習框架 Keras 提供的兩種方法,分別建立了相同結構的模型,引導讀者從理論過渡到實踐。理論深奧難懂,但經過封裝良好的框架,卻能在最短期內,將煊赫一時地深度學習技術投入實踐。但願本文可以幫助對深度學習感興趣的讀者,邁出進入深度學習殿堂的第一步。
微信掃描二維碼 獲取最新技術原創