Keras官方中文文檔:函數式模型API

函數式模型接口

Keras的函數式模型爲Model,即廣義的擁有輸入和輸出的模型,咱們使用Model來初始化一個函數式模型html

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爲輸出,一樣咱們能夠構造擁有多輸入和多輸出的模型python

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_weightclss_weight計算並賦權優化

  • target_tensors: 默認狀況下,Keras將爲模型的目標建立一個佔位符,該佔位符在訓練過程當中將被目標數據代替。若是你想使用本身的目標張量(相應的,Keras將不會在訓練時指望爲這些目標張量載入外部的numpy數據),你能夠經過該參數手動指定。目標張量能夠是一個單獨的張量(對應於單輸出模型),也能夠是一個張量列表,或者一個name->tensor的張量字典。lua

  • kwargs:使用TensorFlow做爲後端請忽略該參數,若使用Theano/CNTK做爲後端,kwargs的值將會傳遞給 K.function。若是使用TensorFlow爲後端,這裏的值會被傳給tf.Session.runspa

當爲參數傳入非法值時會拋出異常

【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

相關文章
相關標籤/搜索