如何加载具有 lambda 层的模型?
这是重现行为的代码:
MEAN_LANDMARKS = np.load('data/mean_shape_68.npy')
def add_mean_landmarks(x):
mean_landmarks = np.array(MEAN_LANDMARKS, np.float32)
mean_landmarks = mean_landmarks.flatten()
mean_landmarks_tf = tf.convert_to_tensor(mean_landmarks)
x = x + mean_landmarks_tf
return x
def get_model():
inputs = Input(shape=(8, 128, 128, 3))
cnn = VGG16(include_top=False, weights='imagenet', input_shape=(128, 128, 3))
x = TimeDistributed(cnn)(inputs)
x = TimeDistributed(Flatten())(x)
x = LSTM(256)(x)
x = Dense(68 * 2, activation='linear')(x)
x = Lambda(add_mean_landmarks)(x)
model = Model(inputs=inputs, outputs=x)
optimizer = Adadelta()
model.compile(optimizer=optimizer, loss='mae')
return model
模型编译后我可以保存它,但是当我尝试使用以下命令加载它时load_model
函数我收到错误:
in add_mean_landmarks
mean_landmarks = np.array(MEAN_LANDMARKS, np.float32)
NameError: name 'MEAN_LANDMARKS' is not defined
据我了解MEAN_LANDMARKS
不作为常数张量并入图中。这也与这个问题有关:如何在 Keras 中添加常量张量? https://stackoverflow.com/questions/52831235/how-to-add-constant-tensor-in-keras/52831446#comment92584381_52831446
你需要通过custom_objects
论证load_model
功能:
model = load_model('model_file_name.h5', custom_objects={'MEAN_LANDMARKS': MEAN_LANDMARKS})
在 Keras 文档中查找更多信息:处理保存模型中的自定义图层(或其他自定义对象) https://keras.io/getting-started/faq/#handling-custom-layers-or-other-custom-objects-in-saved-models.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)