1. 程式人生 > >深度學習入門---Keras報錯集合筆記

深度學習入門---Keras報錯集合筆記

[錯誤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_modelmodel_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)