原文地址
介紹完了優化器和目標函數,那么剩下的就是訓練模型了。這一小節,我們來看一下Keras的Models是如何使用的。Keras可以建立兩種模型,一種是線性疊加的,層與層之間是全連接的方式,一個輸入,一個輸出;另外一種是圖型的,輸入與輸出數量任意,并且可以指定層與層之間的部分連接方式。
一、Sequential(序貫模型)方法及屬性介紹
model = keras.models.Sequential()
序貫模型就是把每一層按照次序疊加起來,每層之間采用全連接方式。下面看一下對象model都有哪些方法。
1 add(layer):往model里邊增加一層
2 compile(optimizer, loss, class_model=”categorical”):
參數:
- optimizer:指定模型訓練的優化器;
- loss:目標函數;
- class_mode: ”categorical”和”binary”中的一個,只是用來計算分類的精確度
3 fit(X, y, batch_size=128, nb_epoch=100, verbose=1, validation_split=0,****validation_data=None,shuffle=True,show_accuracy=False,callbacks=[],****class_weight=Noe, sample_weight=None)****:用于訓練一個固定迭代次數的模型**
返回:記錄字典,包括每一次迭代的訓練誤差率和驗證誤差率;
參數:
X:訓練數據
y : 標簽
batch_size : 每次訓練和梯度更新塊的大小。
nb_epoch: 迭代次數。
verbose : 進度表示方式。0表示不顯示數據,1表示顯示進度條,2表示用只顯示一個數據。
callbacks : 回調函數列表。就是函數執行完后自動調用的函數列表。
validation_split : 驗證數據的使用比例。
validation_data : 被用來作為驗證數據的(X, y)元組。會代替validation_split所劃分的驗證數據。
shuffle : 類型為boolean或 str(‘batch’)。是否對每一次迭代的樣本進行shuffle操作(可以參見博文Theano學習筆記01--Dimshuffle()函數)。’batch’是一個用于處理HDF5(keras用于存儲權值的數據格式)數據的特殊選項。
show_accuracy:每次迭代是否顯示分類準確度。
class_weigh : 分類權值鍵值對。原文:dictionary mapping classes to a weight value, used for scaling the lossfunction (during training only)。鍵為類別,值為該類別對應的權重。只在訓練過程中衡量損失函數用。
sample_weight : list or numpy array with1:1 mapping to the training samples, used for scaling the loss function (duringtraining only). For time-distributed data, there is one weight per sample pertimestep, i.e. if your output data is shaped(nb_samples, timesteps, output_dim), your mask should be of shape(nb_samples, timesteps, 1). This allows you to maskout or reweight individual output timesteps, which is useful in sequence tosequence learning.
4 evalute(X, y, batch_size=128, show_accuracy=False,****verbose=1, sample_weight=None)****: 展示模型在驗證數據上的效果
返回:誤差率或者是(誤差率,準確率)元組(if show_accuracy=True)
參數:和fit函數中的參數基本一致,其中verbose取1或0,表示有進度條或沒有
5 predict(X, batch_size=128, verbose=1): 用于對測試數據的預測
返回:對于測試數據的預測數組
參數:和fit函數中的參數一樣。
6 predict_classes(X, batch_size=128, verbose=1): 用于對測試數據的分類預測
返回:對于測試數據的預測分類結果數組
參數:和evaluate函數中的參數一樣。
7 train_on_batch(X, y, accuracy=False, class_weight=None, sample_weight=None): 對數據塊進行計算并梯度更新
返回:數據塊在現有模型中的誤差率或者元組(if show_accuracy=True)
參數:和evaluate函數中的參數一樣。
8 test_on_batch(X, y, accuracy=False, sample_weight=None): 用數據塊進行性能驗證
返回:數據塊在現有模型中的誤差率或者元組(誤差率,準確率)(if show_accuracy=True)
參數:和evaluate函數中的參數一樣。
9 save_weights (fname, overwrite=False): 將所有層的權值保存為HDF5文件
返回:如果overwrite=False并且fname已經存在,則會拋出異常。
參數:
fname: 文件名
overwrite : 如果已經存在,是否覆蓋原文件。
10 load_weights(fname): 加載已經存在的權值數據到程序中的模型里面。文件中的模型和程序中的模型結構必須一致。在compile之前或之后都可以調用load_ weights函數。
參數: fname文件名
二、Sequential(序貫模型)舉例說明
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import SGD
model = Sequential()
model.add(Dense(2, init='uniform', input_dim=64))
model.add(Activation('softmax'))
model.compile(loss='mse', optimizer='sgd')
'''''
Verbose=1或2的結果演示
'''
model.fit(X_train, y_train, nb_epoch=3, batch_size=16, verbose=1)
# 輸出信息
'''''
Train on 37800 samples, validate on 4200 samples
Epoch 0
37800/37800 [==============================] - 7s - loss: 0.0385
Epoch 1
37800/37800 [==============================] - 8s - loss: 0.0140
Epoch 2
10960/37800 [=======>......................] - ETA: 4s - loss: 0.0109
'''
model.fit(X_train, y_train, nb_epoch=3, batch_size=16, verbose=2)
# 輸出信息
'''''
Train on 37800 samples, validate on 4200 samples
Epoch 0
loss: 0.0190
Epoch 1
loss: 0.0146
Epoch 2
loss: 0.0049
'''
'''''
show_accuracy=True的演示,會輸出誤差率-正確率
'''
model.fit(X_train, y_train, nb_epoch=3, batch_size=16, verbose=2, show_accuracy=True)
# 輸出信息
'''''
Train on 37800 samples, validate on 4200 samples
Epoch 0
loss: 0.0190 - acc.: 0.8750
Epoch 1
loss: 0.0146 - acc.: 0.8750
Epoch 2
loss: 0.0049 - acc.: 1.0000
'''
'''''
validation_split=0.1表示總樣本的10%用來進行驗證。比如下方實例,樣本總數42000,則驗證數據占10%,即4200,剩余的37800為訓練數據。
'''
model.fit(X_train, y_train, nb_epoch=3, batch_size=16, validation_split=0.1, show_accuracy=True, verbose=1)
# outputs
'''''
Train on 37800 samples, validate on 4200 samples
Epoch 0
37800/37800 [==============================] - 7s - loss: 0.0385 - acc.:0.7258 - val. loss: 0.0160 - val. acc.: 0.9136
Epoch 1
37800/37800 [==============================] - 8s - loss: 0.0140 - acc.:0.9265 - val. loss: 0.0109 - val. acc.: 0.9383
Epoch 2
10960/37800 [=======>......................] - ETA: 4s - loss: 0.0109 -acc.: 0.9420