Model類(函數式API)
Keras函數式API是定義複雜模型(如多輸出模型、有向無環圖,或具有共享層模型的方法)
全連接配接網絡
- 網絡層的執行個體是可調用的,它以張量為參數,并傳回一個張量
- 輸入和輸出均為張量,他們都可以用來定義一個模型(Model)
- 這樣的模型和 Keras 的模型相同,都可以被訓練
from keras.layers import Input, Dense
from keras.models import Model
# 傳回一個張量
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.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(data, labels) # 開始訓練
利用函數式 API ,可以重用訓練好的模型:可将任何模型看作是一個層,然後通過傳遞一個張量來調用它。且在調用模型時,不僅重用了模型的結構,還重用了它的權重。
函數式 API 的另一個用途是使用共享網絡層的模型。
多輸入多輸出
若隻有一個輸入:
a = Input(shape=(280, 256))
lstm = LSTM(32)
encoded_a = lstm(a)
assert lstm.output == encoded_a
有多個輸入時可通過如下方法解決:
assert lstm.get_output_at(0) == encoded_a
assert lstm.get_output_at(1) == encoded_b
input_shape 和 output_shape 也是如此:隻要該層有一個節點,或者所有節點都具有相同的輸入/輸出尺寸,那麼他們的輸入/輸出尺寸就能被很好定義,并且由函數唯一傳回。但是如果一個層應用于兩個尺寸的輸入/輸出,就要通過所屬節點的索引來擷取他們。
更多例子(碼着以後看)
- Inception模型
- 卷積層上的殘差連接配接
- 共享視覺模型
- 視覺問答模型
- 視訊問答模型
Model 類模型方法
compile(用于配置訓練模型)
compile(optimizer, loss=None, metrics=None, loss_weights=None,
sample_weight_mode=None, weighted_metrics=None, target_tensors=None)
fit 以固定數量的輪次(資料集上的疊代)訓練模型
fit(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)
evaluate(在測試模式,傳回誤內插補點和評估标準值,計算逐批次進行)
evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None,
steps=None)
predict(為輸入樣本生成輸出預測,計算逐批次進行)
predict(x, batch_size=None, verbose=0, steps=None)
train_on_batch ( 一批樣品的單次梯度更新 )
train_on_batch(x, y, sample_weight=None, class_weight=None)
test_on_batch(在一批樣本上評估模型)
test_on_batch(x, y, sample_weight=None)
predict_on_batch(傳回一批樣本的模型預測值)
predict_on_batch(x)
fit_generator(使用Py生成器或Sequence 執行個體逐批生成的資料,按批次訓練模型)
fit_generator(generator, steps_per_epoch=None, epochs=1, verbose=1,
callbacks=None, validation_data=None, validation_steps=None, class_weight=None, max_queue_size=10, workers=1,
use_multiprocessing=False, shuffle=True, initial_epoch=0)
evaluate_generator ( 在資料生成器上評估模型 )
evaluate_generator(generator, steps=None, max_queue_size=10, workers=1,
use_multiprocessing=False, verbose=0)
predict_generator(為來自資料生成器的輸入樣本生成預測)
predict_generator(generator, steps=None, max_queue_size=10, workers=1,
use_multiprocessing=False, verbose=0)
get_layer(根據名稱或索引值查找網絡層)
get_layer(self, name=None, index=None)