我在Keras创造了一个自定义的损失。让我们假设我们有以下内容:
def a_loss(X):
a, b = X
loss = . . .
return loss
def mean_loss(y_true, y_pred):
return K.mean(y_pred - 0 * y_true)
模型类似于:
.
.
.
z1 = Dense(shape1, activation="linear")(conv_something)
z2 = Dense(shape1, activation="linear")(conv_something2)
loss = a_loss([z1, z2])
model = Model(
inputs=[input1, input2, ..],
outputs=[loss])
model.compile(loss=mean_loss,optimizer=Adam())
现在这个假设模型正常。但是,当我必须使用训练有素的模型来预测我正在使用的东西时:
model.predict(X_dictionary)
我假设上面的输出是loss
(a_loss
函数的输出)。对吗?如果不正确我。
我想要model.predict
的输出是z2
。搜索API你可以使用多个输出:
model = Model(
inputs=[sequence_input_desc, sequence_input_title_positive, sequence_input_title_negative],
outputs=[loss, z2]
)
但上述内容将培训最小化loss
和z2
。我想要的是仅训练以最小化loss
和预测函数以输出z2
。检查文档的一种方法是在loss_weights=[1.0,0.0]
中使用compile
,但它不起作用。它输出错误The model expects 2target arrays, but only received one array. Found: array with shape ..
知道该怎么做吗?
答案 0 :(得分:1)
训练完成后,您只需创建一个使用相同图层但输出不同的新模型:
model = Model(
inputs=[input1, input2, ..],
outputs=[z2])
它将重复使用学习的权重,因为它们存储在图层中,而不是模型中(它只是一个容器)。
然后,您可以像往常一样使用model.predict
来获得结果。