加载模型后,LSTM超参数在model.summary()中不可用

时间:2018-12-13 14:43:17

标签: python machine-learning keras lstm hyperparameters

我尝试使用以下命令加载由Keras创建的LSTM模型:

    model_json = model.to_json()
    with open("model.json", "w") as json_file:
    json_file.write(model_json)

使用命令:

json_file = open('model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)

并通过命令打印lr和其他超参数:

loaded_model.summary()

我收到了有关LSTM结构的所有信息。但是我没有收到lr等的超参数信息。

1 个答案:

答案 0 :(得分:1)

学习率是模型优化器的参数,不包含在model.summary()输出中。如果要查找学习率的值,可以使用模型的optimizer属性,然后使用K.eval()评估学习率张量并获取其实际值:

print(K.eval(model.optimizer.lr))

更新:当您使用to_json方法时,不会保存模型的优化器,因此上述解决方案不起作用。如果要保存包括层权重和优化器(及其状态)在内的整个模型,则可以使用save方法:

model.save('my_model.h5')

然后您可以使用load_model加载它:

from keras.models import load_model

model = load_model('my_model.h5')

或者,如果您同时使用save_weights方法(以节省图层的权重)和to_json方法(仅用于保存 模型的体系结构),则您可以在使用model_from_json重新加载模型后重新加载权重:

# load the architecture of model from json file ...

# load the weights
model.load_weights('model_weights.h5')

但是,第二种方法中的优化器尚未保存,因此您需要重新编译模型(请注意,这意味着优化器的状态已丢失,因此您可能无法轻松地继续训练,而无需先配置优化程序;但是,如果您只想将模型用于预测从头开始训练模型,则可以。 / p>

我也强烈建议您阅读Keras常见问题解答中的相关部分:How can I save a Keras model?