函式式模型介面
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=https://www.cnblogs.com/memory-ming/p/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=https://www.cnblogs.com/memory-ming/p/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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/230213.html
標籤:其他
上一篇:容器網路(六)overlay 如何實作跨主機通信?【47】
下一篇:高危:弱密碼問題
