深度學習入門---Keras報錯集合筆記
阿新 • • 發佈:2018-12-22
[錯誤1]
在model.fit()呼叫之後會出現如下錯誤說明:
Cannot interpret feed_dict key as Tensor: Tensor Tensor("conv2d_1_input:0", shape=(?, 256, 196, 3), ,dtype=float32) is not an element of this graph
[錯誤原因]:model底層tensorflow的session中還有資料
[解決方法]:在呼叫模型前面加一句 keras.backend.clear_session()
[錯誤2]
InternalError: Dst tensor is not initialized.
[錯誤原因]:GPU記憶體不夠
[解決方法]:增加GPU記憶體
[錯誤3]
自定義class,訓練後再load model時找不到
[解決方法]:
如果要載入的模型包含自定義層或其他自定義類或函式,則可以通過 custom_objects
引數將它們傳遞給載入機制:
from keras.models import load_model
model = load_model('my_model.h5',cunsom_objects={'AttentionLayer':AttentionLayer})#假設AttentionLayer為自定義class
以此類推:
自定義物件的處理與 load_model
, model_from_json
model_from_yaml
的工作方式相同:from keras.models import model_from_json
model = model_from_json(json_string, custom_objects={'AttentionLayer': AttentionLayer})
或者寫為:
model = model_from_json(json_string, {'AttentionLayer': AttentionLayer})
[錯誤4]
模型並非最好訓練結果
[解決方法]
from keras.callbacks import ModelCheckpoint checkpoint = ModelCheckpoint(filepath=file_name(就是你準備存放最好模型的地方), monitor='val_acc'(或者換成你想監視的值,比如acc,loss, val_loss,其他值應該也可以,還沒有試), verbose=1(如果你喜歡進度條,那就選1,如果喜歡清爽的就選0,verbose=冗餘的), save_best_only='True'(只儲存最好的模型,也可以都儲存), mode='auto'(如果監視器monitor選val_acc, mode就選'max',如果monitor選acc,mode也可以選'max',如果monitor選loss,mode就選'min'),一般情況下選'auto', period=1(checkpoints之間間隔的epoch數))
#呼叫:
filepath='weights.best.hdf5' # 有一次提升, 則覆蓋一次. checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max') callbacks_list = [checkpoint] # fit model.fit(X, y, validation_split=0.33, nb_epoch=150, batch_size=10, callbacks=callbacks_list, verbose=0)