我有一个自定义损失,它使用模型的输入之一。
def closs(labels,latent_dim):
def loss(y_true,y_pred):
return metric_learning.contrastive_loss(labels=labels,
embeddings_anchor=y_pred[:,:latent_dim],
embeddings_positive=y_pred[:,latent_dim:])
return loss
标签在哪里是模型的输入。模型架构为:
def build_model():
left_input = Input(shape=(2900,1))
right_input = Input(shape=(2900,1))
label = Input(shape=(1,))
encoder = build_encoder()
left_embed = encoder(left_input)
right_embed = encoder(right_input)
embeds = Concatenate()([left_embed,right_embed])
model = Model(inputs=[left_input,right_input,label],outputs=[embeds])
return model, label
然后我使用返回的“标签”来编译模型:
model,label = build_model()
model.compile(optimizer='adam',loss=closs(label,256))
但是当我尝试加载模型时,我必须将此损失作为custom_object传递,所以类似这样:
model = load_model('model/cl_model.h5',custom_objects={'loss':closs(xyz,256)})
问题是我要在另一个python脚本中加载模型,因此没有“ label”输入对象。 我该如何克服?
答案 0 :(得分:0)
您是使用权重来重新训练模型还是只是根据新数据进行预测? 在仅预测的情况下,您可以使用
model.load_weights('model/cl_model.h5')
定义模型后,您不必传递损失函数,因为它仅用于预测。