Keras官方中文文件:函式式模型API
函式式模型介面
Keras的函式式模型為Model
,即廣義的擁有輸入和輸出的模型,我們使用Model
來初始化一個函式式模型
from keras.models import Model from keras.layers import Input, Dense a = Input(shape=(32,)) b = Dense(32)(a) model = Model(inputs=a, outputs=b)
在這裡,我們的模型以a
為輸入,以b
為輸出,同樣我們可以構造擁有多輸入和多輸出的模型
model = Model(inputs=[a1, a2], outputs=[b1, b2, b3])
常用Model屬性
model.layers
:組成模型圖的各個層model.inputs
:模型的輸入張量列表model.outputs
:模型的輸出張量列表
Model模型方法
compile
compile(self, optimizer, loss, metrics=None, loss_weights=None, sample_weight_mode=None, weighted_metrics=None, target_tensors=None)
本函式編譯模型以供訓練,引數有
-
optimizer:優化器,為預定義優化器名或優化器物件,參考優化器
-
loss:損失函式,為預定義損失函式名或一個目標函式,參考
-
metrics:列表,包含評估模型在訓練和測試時的效能的指標,典型用法是
metrics=['accuracy']
如果要在多輸出模型中為不同的輸出指定不同的指標,可像該引數傳遞一個字典,例如metrics={'ouput_a': 'accuracy'}
-
sample_weight_mode:如果你需要按時間步為樣本賦權(2D權矩陣),將該值設為“temporal”。預設為“None”,代表按樣本賦權(1D權)。如果模型有多個輸出,可以向該引數傳入指定sample_weight_mode的字典或列表。在下面
fit
函式的解釋中有相關的參考內容。 -
weighted_metrics: metrics列表,在訓練和測試過程中,這些metrics將由
sample_weight
clss_weight
計算並賦權 -
target_tensors: 預設情況下,Keras將為模型的目標建立一個佔位符,該佔位符在訓練過程中將被目標資料代替。如果你想使用自己的目標張量(相應的,Keras將不會在訓練時期望為這些目標張量載入外部的numpy資料),你可以通過該引數手動指定。目標張量可以是一個單獨的張量(對應於單輸出模型),也可以是一個張量列表,或者一個name->tensor的張量字典。
-
kwargs:使用TensorFlow作為後端請忽略該引數,若使用Theano/CNTK作為後端,kwargs的值將會傳遞給 K.function。如果使用TensorFlow為後端,這裡的值會被傳給tf.Session.run
當為引數傳入非法值時會丟擲異常
【Tips】如果你只是載入模型並利用其predict,可以不用進行compile。在Keras中,compile主要完成損失函式和優化器的一些配置,是為訓練服務的。predict會在內部進行符號函式的編譯工作(通過呼叫_make_predict_function生成函式),
fit
fit(self, x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None)
本函式用以訓練模型,引數有:
-
x:輸入資料。如果模型只有一個輸入,那麼x的型別是numpy array,如果模型有多個輸入,那麼x的型別應當為list,list的元素是對應於各個輸入的numpy array。如果模型的每個輸入都有名字,則可以傳入一個字典,將輸入名與其輸入資料對應起來。
-
y:標籤,numpy array。如果模型有多個輸出,可以傳入一個numpy array的list。如果模型的輸出擁有名字,則可以傳入一個字典,將輸出名與其標籤對應起來。
-
batch_size:整數,指定進行梯度下降時每個batch包含的樣本數。訓練時一個batch的樣本會被計算一次梯度下降,使目標函式優化一步。
-
epochs:整數,訓練終止時的epoch值,訓練將在達到該epoch值時停止,當沒有設定initial_epoch時,它就是訓練的總輪數,否則訓練的總輪數為epochs - inital_epoch
-
verbose:日誌顯示,0為不在標準輸出流輸出日誌資訊,1為輸出進度條記錄,2為每個epoch輸出一行記錄
-
callbacks:list,其中的元素是
keras.callbacks.Callback
的物件。這個list中的回撥函式將會在訓練過程中的適當時機被呼叫,參考回撥函式 -
validation_split:0~1之間的浮點數,用來指定訓練集的一定比例資料作為驗證集。驗證集將不參與訓練,並在每個epoch結束後測試的模型的指標,如損失函式、精確度等。注意,validation_split的劃分在shuffle之後,因此如果你的資料本身是有序的,需要先手工打亂再指定validation_split,否則可能會出現驗證集樣本不均勻。
-
validation_data:形式為(X,y)或(X,y,sample_weights)的tuple,是指定的驗證集。此引數將覆蓋validation_spilt。
-
shuffle:布林值,表示是否在訓練過程中每個epoch前隨機打亂輸入樣本的順序。
-
class_weight:字典,將不同的類別對映為不同的權值,該引數用來在訓練過程中調整損失函式(只能用於訓練)。該引數在處理非平衡的訓練資料(某些類的訓練樣本數很少)時,可以使得損失函式對樣本數不足的資料更加關注。
-
sample_weight:權值的numpy array,用於在訓練時調整損失函式(僅用於訓練)。可以傳遞一個1D的與樣本等長的向量用於對樣本進行1對1的加權,或者在面對時序資料時,傳遞一個的形式為(samples,sequence_length)的矩陣來為每個時間步上的樣本賦不同的權。這種情況下請確定在編譯模型時添加了
sample_weight_mode='temporal'
。 -
initial_epoch: 從該引數指定的epoch開始訓練,在繼續之前的訓練時有用。
-
steps_per_epoch: 一個epoch包含的步數(每一步是一個batch的資料送入),當使用如TensorFlow資料Tensor之類的輸入張量進行訓練時,預設的None代表自動分割,即資料集樣本數/batch樣本數。
- validation_steps: 僅當steps_per_epoch被指定時有用,在驗證集上的step總數。
輸入資料與規定資料不匹配時會丟擲錯誤
fit
函式返回一個History
的物件,其History.history
屬性記錄了損失函式和其他指標的數值隨epoch變化的情況,如果有驗證集的話,也包含了驗證集的這些指標變化情況
evaluate
evaluate(self, x, y, batch_size=32, verbose=1, sample_weight=None)
本函式按batch計算在某些輸入資料上模型的誤差,其引數有:
-
x:輸入資料,與
fit
一樣,是numpy array或numpy array的list -
y:標籤,numpy array
-
batch_size:整數,含義同
fit
的同名引數 -
verbose:含義同
fit
的同名引數,但只能取0或1 -
sample_weight:numpy array,含義同
fit
的同名引數
本函式返回一個測試誤差的標量值(如果模型沒有其他評價指標),或一個標量的list(如果模型還有其他的評價指標)。model.metrics_names
將給出list中各個值的含義。
如果沒有特殊說明,以下函式的引數均保持與fit
的同名引數相同的含義
如果沒有特殊說明,以下函式的verbose引數(如果有)均只能取0或1
predict
predict(self, x, batch_size=32, verbose=0)
本函式按batch獲得輸入資料對應的輸出,其引數有:
函式的返回值是預測值的numpy array
train_on_batch
train_on_batch(self, x, y, class_weight=None, sample_weight=None)
本函式在一個batch的資料上進行一次引數更新
函式返回訓練誤差的標量值或標量值的list,與evaluate的情形相同。
test_on_batch
test_on_batch(self, x, y, sample_weight=None)
本函式在一個batch的樣本上對模型進行評估
函式的返回與evaluate的情形相同
predict_on_batch
predict_on_batch(self, x)
本函式在一個batch的樣本上對模型進行測試
函式返回模型在一個batch上的預測結果
fit_generator
fit_generator(self, generator, steps_per_epoch, epochs=1, verbose=1, callbacks=None, validation_data=None, validation_steps=None, class_weight=None, max_q_size=10, workers=1, pickle_safe=False, initial_epoch=0)
利用Python的生成器,逐個生成資料的batch並進行訓練。生成器與模型將並行執行以提高效率。例如,該函式允許我們在CPU上進行實時的資料提升,同時在GPU上進行模型訓練
函式的引數是:
-
generator:生成器函式,生成器的輸出應該為:
-
一個形如(inputs,targets)的tuple
-
一個形如(inputs, targets,sample_weight)的tuple。所有的返回值都應該包含相同數目的樣本。生成器將無限在資料集上迴圈。每個epoch以經過模型的樣本數達到
samples_per_epoch
時,記一個epoch結束
-
-
steps_per_epoch:整數,當生成器返回
steps_per_epoch
次資料時計一個epoch結束,執行下一個epoch -
epochs:整數,資料迭代的輪數
-
verbose:日誌顯示,0為不在標準輸出流輸出日誌資訊,1為輸出進度條記錄,2為每個epoch輸出一行記錄
-
validation_data:具有以下三種形式之一
-
生成驗證集的生成器
-
一個形如(inputs,targets)的tuple
-
一個形如(inputs,targets,sample_weights)的tuple
-
-
validation_steps: 當validation_data為生成器時,本引數指定驗證集的生成器返回次數
-
class_weight:規定類別權重的字典,將類別對映為權重,常用於處理樣本不均衡問題。
-
sample_weight:權值的numpy array,用於在訓練時調整損失函式(僅用於訓練)。可以傳遞一個1D的與樣本等長的向量用於對樣本進行1對1的加權,或者在面對時序資料時,傳遞一個的形式為(samples,sequence_length)的矩陣來為每個時間步上的樣本賦不同的權。這種情況下請確定在編譯模型時添加了
sample_weight_mode='temporal'
。 -
workers:最大程序數
-
max_q_size:生成器佇列的最大容量
-
pickle_safe: 若為真,則使用基於程序的執行緒。由於該實現依賴多程序,不能傳遞non picklable(無法被pickle序列化)的引數到生成器中,因為無法輕易將它們傳入子程序中。
-
initial_epoch: 從該引數指定的epoch開始訓練,在繼續之前的訓練時有用。
函式返回一個History
物件
例子
def generate_arrays_from_file(path): while 1: f = open(path) for line in f: # create numpy arrays of input data # and labels, from each line in the file x1, x2, y = process_line(line) yield ({'input_1': x1, 'input_2': x2}, {'output': y}) f.close() model.fit_generator(generate_arrays_from_file('/my_file.txt'), steps_per_epoch=10000, epochs=10)
evaluate_generator
evaluate_generator(self, generator, steps, max_q_size=10, workers=1, pickle_safe=False)
本函式使用一個生成器作為資料來源,來評估模型,生成器應返回與test_on_batch
的輸入資料相同型別的資料。
函式的引數是:
-
generator:生成輸入batch資料的生成器
-
val_samples:生成器應該返回的總樣本數
-
steps:生成器要返回資料的輪數
-
max_q_size:生成器佇列的最大容量
-
nb_worker:使用基於程序的多執行緒處理時的程序數
-
pickle_safe:若設定為True,則使用基於程序的執行緒。注意因為它的實現依賴於多程序處理,不可傳遞不可pickle的引數到生成器中,因為它們不能輕易的傳遞到子程序中。
predict_generator
predict_generator(self, generator, steps, max_queue_size=10, workers=1, use_multiprocessing=False, verbose=0)
從一個生成器上獲取資料並進行預測,生成器應返回與predict_on_batch
輸入類似的資料
函式的引數是:
-
generator:生成輸入batch資料的生成器
-
val_samples:生成器應該返回的總樣本數
-
max_q_size:生成器佇列的最大容量
-
nb_worker:使用基於程序的多執行緒處理時的程序數
-
pickle_safe:若設定為True,則使用基於程序的執行緒。注意因為它的實現依賴於多程序處理,不可傳遞不可pickle的引數到生成器中,因為它們不能輕易的傳遞到子程序中。
轉載於:https://blog.csdn.net/weixin_30716141/article/details/99481089?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control