Python軟件基金會成員(Contibuting Member)Vihar Kurama簡明扼要地介紹了深度學習的基本概念,同時提供了一個基于Keras搭建的深度學習網(wǎng)絡示例。
深度學習背后的主要想法是,人工智能應該借鑒人腦。這一觀點帶來了“神經(jīng)網(wǎng)絡”這一術語的興起。大腦包含數(shù)十億神經(jīng)元,這些神經(jīng)元之間有數(shù)萬連接。深度學習算法在很多情況下復現(xiàn)了大腦,大腦和深度學習模型都牽涉大量計算單元(神經(jīng)元),這些神經(jīng)元自身并不如何智能,但當它們互相交互時,變得智能起來。
我覺得人們需要了解深度學習在幕后讓很多事情變得更好。Google搜索和圖像搜索已經(jīng)使用了深度學習技術;它允許你使用“擁抱”之類的詞搜索圖像。
—— Geoffrey Hinton
神經(jīng)元
神經(jīng)網(wǎng)絡的基本構(gòu)件是人工神經(jīng)元,人工神經(jīng)元模擬人腦神經(jīng)元。它們是簡單而強大的計算單元,基于加權(quán)的輸入信號,使用激活函數(shù)產(chǎn)出輸出信號。神經(jīng)元遍布神經(jīng)網(wǎng)絡的各層。
人工神經(jīng)網(wǎng)絡如何工作?
深度學習包含建模人腦中的神經(jīng)網(wǎng)絡的人工神經(jīng)網(wǎng)絡。當數(shù)據(jù)流經(jīng)這一人工網(wǎng)絡時,每層處理數(shù)據(jù)的一個方面,過濾離散值,識別類似實體,并產(chǎn)生最終輸出。
輸入層(Input Layer)這一層包含的神經(jīng)元僅僅接受輸入并將其傳給其他層。輸入層中的神經(jīng)元數(shù)目應當?shù)扔跀?shù)據(jù)集的屬性數(shù)或特征數(shù)。
輸出層(Output Layer)輸出層輸出預測的特征,基本上,它取決于構(gòu)建的具體模型類別。
隱藏層(Hidden Layer)在輸入層和輸出層之間的是隱藏層。在訓練網(wǎng)絡的過程中,隱藏層的權(quán)重得到更新,以提升其預測能力。
神經(jīng)元權(quán)重
權(quán)重指兩個神經(jīng)元之間的連接的強度,如果你熟悉線性回歸,你可以將輸入的權(quán)重想象成回歸公式中的系數(shù)。權(quán)重通常使用較小的隨機值初始化,例如0到1之間的值。
前饋深度網(wǎng)絡
前饋監(jiān)督神經(jīng)網(wǎng)絡是最早也是最成功的神經(jīng)網(wǎng)絡模型之一。它們有時也稱為多層感知器(Multi-Layer Perceptron,MLP),或者簡單地直接稱為神經(jīng)網(wǎng)絡。
輸入沿著激活神經(jīng)元流經(jīng)整個網(wǎng)絡直至生成輸出值。這稱為網(wǎng)絡的前向傳播(forward pass)。
激活函數(shù)
激活函數(shù)將輸入的加權(quán)和映射至神經(jīng)元的輸出。之所以被稱為激活函數(shù),是因為它控制激活哪些神經(jīng)元,以及輸出信號的強度。
有許多激活函數(shù),其中最常用的是ReLU、tanh、SoftPlus。
圖片來源:ml-cheatsheet
反向傳播
比較網(wǎng)絡的預測值和期望輸出,通過一個函數(shù)計算誤差。接著在整個網(wǎng)絡上反向傳播誤差,每次一層,權(quán)重根據(jù)其對誤差的貢獻作相應程度的更新。這稱為反向傳播(Back-Propagation)算法。在訓練集的所有樣本上重復這一過程。為整個訓練數(shù)據(jù)集更新網(wǎng)絡稱為epoch。網(wǎng)絡可能需要訓練幾十個、幾百個、幾千個epoch。
代價函數(shù)和梯度下降
代價函數(shù)衡量神經(jīng)網(wǎng)絡在給定的訓練輸入和期望輸出上“有多好”。它也可能取決于權(quán)重或偏置等參數(shù)。
代價函數(shù)通常是標量,而不是向量,因為它評價的是網(wǎng)絡的整體表現(xiàn)。使用梯度下降(Gradient Descent)優(yōu)化算法,權(quán)重在每個epoch后增量更新。
比如,誤差平方和(Sum of Squared Errors,SSE)就是一種常用的代價函數(shù)。
權(quán)重更新的幅度和方向通過計算代價梯度得出:
η為學習率
下為單個系數(shù)的代價函數(shù)梯度下降示意圖:
多層感知器(前向傳播)
多層感知器包含多層神經(jīng)元,經(jīng)常以前饋方式互相連接。每層中的每個神經(jīng)元和下一層的神經(jīng)元直接相連。在許多應用中,多層感知器使用sigmoid或ReLU激活函數(shù)。
現(xiàn)在讓我們來看一個例子。給定賬戶和家庭成員作為輸入,預測交易數(shù)。
首先我們需要創(chuàng)建一個多層感知器或者前饋神經(jīng)網(wǎng)絡。我們的多層感知器將有一個輸入層、一個隱藏層、一個輸出層,其中,家庭成員數(shù)為2,賬戶數(shù)為3,如下圖所示:
隱藏層(i、j)和輸出層(k)的值將使用如下的前向傳播過程計算:
i = (2 * 1) + (3 * 1) = 5
j = (2 * -1) + (3 * 1) = 1
k = (5 * 2) + (1 * -1) = 9
上面的計算過程沒有涉及激活函數(shù),實際上,為了充分發(fā)揮神經(jīng)網(wǎng)絡的預測能力,我們還需要使用激活函數(shù),以引入非線性。
比如,使用ReLU激活函數(shù):
這一次,我們的輸入為[3, 4],權(quán)重分別為[2, 4], [4, -5], [2, 7]。
i = (3 * 2) + (4 * 4) = 22
i = relu(22) = 22
j = (3 * 4) + (4 * -5) = -8
j = relu(-8) = 0
k = (22 * 2) + (0 * 7) = 44
k = relu(44) = 44
基于Keras開發(fā)神經(jīng)網(wǎng)絡
關于Keras
Keras是一個高層神經(jīng)網(wǎng)絡API,基于Python,可以在TensorFlow、CNTK、Theano上運行。(譯者注:Theano已停止維護。)
運行以下命令可以使用pip安裝keras:
sudo pip install keras
在Keras中實現(xiàn)深度學習程序的步驟
加載數(shù)據(jù)
定義模型
編譯模型
訓練模型
評估模型
整合
開發(fā)Keras模型
keras使用Dense類描述全連接層。我們可以通過相應的參數(shù)指定層中的神經(jīng)元數(shù)目,初始化方法,以及激活函數(shù)。定義模型之后,我們可以編譯(compile)模型。編譯過程將調(diào)用后端框架,比如TensorFlow。之后我們將在數(shù)據(jù)上運行模型。我們通過調(diào)用模型的fit()方法在數(shù)據(jù)上訓練模型。
from keras.models importSequential
from keras.layers importDense
import numpy
# 初始化隨機數(shù)值
seed = 7
numpy.random.seed(seed)
# 加載數(shù)據(jù)集(PIMA糖尿病數(shù)據(jù)集)
dataset = numpy.loadtxt('datasets/pima-indians-diabetes.csv', delimiter=",")
X = dataset[:, 0:8]
Y = dataset[:, 8]
# 定義模型
model = Sequential()
model.add(Dense(16, input_dim=8, init='uniform', activation='relu'))
model.add(Dense(8, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
# 編譯模型
model.compile(loss='binary_crossentropy',
optimizer='adam', metrics=['accuracy'])
# 擬合模型
model.fit(X, Y, nb_epoch=150, batch_size=10)
# 評估
scores = model.evaluate(X, Y)
print("%s: %.2f%%" % (model.metrics_names[1], scores[1] * 100))
輸出:
$python keras_pima.py
768/768 [==============================] - 0s - loss: 0.6776 - acc: 0.6510
Epoch2/150
768/768 [==============================] - 0s - loss: 0.6535 - acc: 0.6510
Epoch3/150
768/768 [==============================] - 0s - loss: 0.6378 - acc: 0.6510
.
.
.
.
.
Epoch149/150
768/768 [==============================] - 0s - loss: 0.4666 - acc: 0.7786
Epoch150/150
768/768 [==============================] - 0s - loss: 0.4634 - acc: 0.773432/768
[>.............................] - ETA: 0sacc: 77.73%
我們訓練了150個epoch,最終達到了77.73%的精確度。
-
python
+關注
關注
56文章
4827瀏覽量
86781 -
深度學習
+關注
關注
73文章
5561瀏覽量
122805
原文標題:基于Python入門深度學習
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
基于 Python 的深度學習庫Keras入門知識
如何使用tensorflow快速搭建起一個深度學習項目
Nanopi深度學習之路(1)深度學習框架分析
【NanoPi K1 Plus試用體驗】搭建深度學習框架
使用keras搭建神經(jīng)網(wǎng)絡實現(xiàn)基于深度學習算法的股票價格預測
Keras搭建神經(jīng)網(wǎng)絡的一般步驟
深度學習框架Keras代碼解析
深度學習在各個領域有什么樣的作用深度學習網(wǎng)絡的使用示例分析

深度學習網(wǎng)絡訓練技巧的詳細資料匯總

評論