【发布时间】:2018-09-19 19:58:29
【问题描述】:
我有一个 Keras 模型,我想在其中为预测添加一个常数。经过一番谷歌搜索,我得到了以下代码,这正是我想要的:
import numpy as np
from keras.layers import Input, Add
from keras.backend import variable
from keras.models import Model, load_model
inputs = Input(shape=(1,))
add_in = Input(tensor=variable([[5]]), name='add')
output = Add()([inputs, add_in])
model = Model([inputs, add_in], output)
model.compile(loss='mse', optimizer='adam')
X = np.array([1,2,3,4,5,6,7,8,9,10])
model.predict(X)
但是,如果我保存并加载此模型,Keras 似乎会丢失常量:
p = 'k_model.hdf5'
model.save(p)
del model
model2 = load_model(p)
model2.predict(X)
返回:
检查模型时出错:您所在的 Numpy 数组列表 传递给您的模型不是模型预期的大小。预计 查看 2 个数组,但得到了以下 1 个数组的列表:
如何在保存/加载 Keras 模型时包含常量?
【问题讨论】:
-
它总是一个常数吗?例如,模型的所有输入总是 5 吗?为什么不使用 Lambda 层呢?
-
@today 它始终是一个常数。无论输入如何,我都想要一个始终将 5 添加到预测的模型。
-
我可以采取的另一种方法是向模型添加一个始终为 5 的输入,但这意味着我必须分配一个非常大的 numpy 数组。我上面使用的方法似乎更优雅一些,除了保存/加载问题。
标签: python serialization keras constants