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

LSTM hyperparameters not available in model.summary() after loading model

我尝试在使用以下命令后加载 LSTM 模型(由 Keras 创建):

    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等超参信息

学习率是模型优化器的一个参数,不包含在 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')

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

我强烈建议您也阅读 Keras FAQ 中的相关部分:How can I save a Keras model?