Keras中文文檔學(xué)習(xí)筆記1

一 主頁

1 Keras核心數(shù)據(jù)結(jié)構(gòu)是模型,并且主要的模型是Sequential模型,它是一系列網(wǎng)絡(luò)層按照順序構(gòu)成的棧。模型定義如下:

from keras.model import Sequential
model = Sequential()

然后往這個模型里添加網(wǎng)絡(luò)層,用add堆疊,就構(gòu)成了一個模型。

frome keras.layers import Dense, Activation
model.add(Dense(units=64, input_dim=100))
model.add(Activation("relu"))
model.add(Dense(units=10)) #添加隱藏層
model.add(Activation("softmax")) #激活函數(shù)

注意,keras有兩種建模方式,一種是序貫式,一種是函數(shù)式,上述方法是序貫式,而函數(shù)式一般如下

inputs = Input(shape=(784,))
x = Dense(64, activation='relu')(inputs)
x = Dense(64, activation='relu')(x)
predictions = Dense(10, activation='softmax')(x)
#直接定義輸入層、以及隱藏層,上一層的輸出是下一層的輸入
model = Model(inputs=inputs, outputs=predictions)#完成后,使用model進(jìn)行建模,序貫式方法沒有建模,而是直接編譯。
#接下去的模型編譯和模型訓(xùn)練和序貫式方法一致,下面介紹

完成模型搭建后,需要編譯模型。編譯的時候指定損失函數(shù)loss,優(yōu)化器optimmizer

model.compile(loss='categorical_crossentropy', optimizer='sgd',metrics=['accuracy'])

完成編譯后,在訓(xùn)練數(shù)據(jù)上按照batch進(jìn)行一定次數(shù)的迭代訓(xùn)練網(wǎng)絡(luò),epochs是迭代次數(shù),batch_size是每次訓(xùn)練的數(shù)據(jù)集大小

model.fit(x_train, y_train, epochs=5, batch_size=32)

訓(xùn)練完成后,可以進(jìn)行模型評估,以及使用模型進(jìn)行預(yù)測

loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128) #模型評估

classes = model.predict(x_test, batch_size=128) #使用模型預(yù)測

keras必須選擇一個后端,一般有tensorflow, theano , cntk。后端是keras依賴于完成頂層張量運(yùn)算的軟件包。

二 一些基本概念
1 張量
可以看作是向量、矩陣的推廣。
0階張量:即標(biāo)量。
1階張量:一些數(shù)有序排列起來,也就是一個向量。
2階張量:一組有序向量排列起來,也就是一個矩陣。
3階張量:把矩陣堆疊起來,比如具有三個顏色通道的彩色圖片就是這樣一個立方體。
...
張量維度:即階數(shù)。
2 data_format
theano: (樣本維,通道維,高,寬) --channels_first
thesorflow:(樣本維,高,寬,通道維)--channels_last
樣本維:表示樣本的樹木
通道維:表示顏色的通道數(shù)
寬、高:表示圖片的寬和高
3 batch
深度學(xué)習(xí)更新參數(shù)的方法:
第一種,batch gradient descent 遍歷全部數(shù)據(jù)集算一次損失函數(shù),然后算損失函數(shù)對各個參數(shù)的梯度,更新梯度。計算速度慢,不支持在線學(xué)習(xí)。
第二種,隨機(jī)梯度下降,每次看一個數(shù)據(jù)就計算一下?lián)p失函數(shù),然后求梯度更新參數(shù)。速度快,到那時可能在最優(yōu)點(diǎn)附近晃來晃去。
折中一下,基于mini-batch,大小為batch_size,采用小批次的梯度下降,把數(shù)據(jù)分成若干批,按批次來更新參數(shù)。一個批次中的一組數(shù)據(jù)共同決定了本次梯度的方向。
4 epochs
迭代次數(shù),就是訓(xùn)練過程中數(shù)據(jù)將被“輪”多少次。
5 生成式函數(shù),匿名函數(shù)lanbda

三 常見問題
1 當(dāng)使用tensorflow作為后端的時候,機(jī)器上如果有可用gpu時,代碼會自動調(diào)用GPU進(jìn)行并行計算。
2 sample:數(shù)據(jù)集中的一條數(shù)據(jù),例如圖片數(shù)據(jù)集中的一張圖片,語音數(shù)據(jù)中的一段音頻
batch:由若干條數(shù)據(jù)構(gòu)成,進(jìn)行網(wǎng)絡(luò)優(yōu)化的基本單位,網(wǎng)絡(luò)的每一輪優(yōu)化需要使用一個batch。
Epoch:batch對應(yīng)一次更新,Epoch對應(yīng)一輪更新。一輪更新中次數(shù)可以隨意,但通常一般會設(shè)置會遍歷一遍數(shù)據(jù)集,因此含義是模型完整的看一遍數(shù)據(jù)集。主要作用是把模型的訓(xùn)練過程分成若干個階段。
3 保存模型:該操作保存了模型的結(jié)構(gòu)、權(quán)重、訓(xùn)練配置(損失函數(shù),優(yōu)化器)、優(yōu)化器的狀態(tài)

from keras.model import load_model
model.save('my_model.h5')
del model
model = load_model('my_model.h5') #加載模型

4 獲得中間層的輸出
創(chuàng)建一個新的model,使得該model的輸出是我們想要的層的輸出

from keras.models import Model
model = ... #創(chuàng)建一個模型
layer_name = 'my_layer' #指定我們想要輸出的層名字
intermediate_layer_model=Model(input=model.input, output=model.get_layer(layer_name).output) #指定輸入,輸出,輸出為原模型的輸出,用來獲取一個新模型
layer_output= intermediate_layer_model.predict(data) #預(yù)測

5 設(shè)置驗(yàn)證集
model.fit函數(shù)的參數(shù)
validation_split參數(shù):在model.fit的時候,設(shè)置validation_spilt的值,則可以將數(shù)據(jù)分為訓(xùn)練集和驗(yàn)證集,如果該值設(shè)置為0.1,則默認(rèn)將輸入數(shù)據(jù)的最末百分之十作為驗(yàn)證集。
shuffle參數(shù):該參數(shù)為真,訓(xùn)練數(shù)據(jù)會被隨機(jī)洗亂。在每個epoch中被重新洗一次。
hist參數(shù):

hist=model.fit(X,y, validation_split=0.2)
print(hist.history)#返回一個epoch后損失函數(shù)的值以及其他度量指標(biāo)

6 從sequential模型中去除一層
使用.pop去除模型最后一層,反復(fù)調(diào)用n次可以去除模型后面的n個層

model = Sequential()
model.add(Dense())
model.add(Dense())
print(len(model.layers))#打印層數(shù),顯示為2

model.pop() #去除一層
print(len(model.layers)) #打印層數(shù),顯示為1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容