[错误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)