Keras只培训特定的产出

时间:2017-03-14 11:59:36

标签: python neural-network keras

我正在使用带有张量流的Kears,我有一个3输出的模型,其中我只想训练2。

model = Model(input=input, output=[out1,out2,out3])
model.compile(loss=[loss1, loss2, loss3], optimizer=my_optimizer)

loss1(y_true, y_pred):
    return calculate_loss1(y_true, y_pred)

loss2(y_true, y_pred):
    return calculate_loss2(y_true, y_pred)

loss3(y_true, y_pred):
    return 0.0*K.mean(y_pred)

我尝试用上面的代码来做,但我不确定它做了我想做的事情。因此,我认为它会增加损失,并且会根据损失对每个输出进行训练,同时我根本不想训练out3。 (我需要out3,因为它用于测试)。有人能告诉我如何实现这一目标,或者让我放心,代码实际上是按照我想要的方式进行的吗?

2 个答案:

答案 0 :(得分:13)

您必须创建2个不同的模型

model1 = Model(input=input, output=[out1,out2])
model2 = Model(input=input, output=[out1,out2,out3])

你编译两者但只适合第一个。他们将共享图层,因此即使没有经过培训,模型2也会从模型1中获得权重。但是如果out3中有一层可以训练但不在图形的输入和out1和out2之间的流动,那么该层将不会被训练,因此将保持其初始值。

这有帮助吗? : - )

答案 1 :(得分:0)

您可以将损失之一设置为None

model = Model(input=input, output=[out1,out2,out3])
model.compile(loss=[loss1, loss2, None], optimizer=my_optimizer)


loss1(y_true, y_pred):
    return calculate_loss1(y_true, y_pred)


loss2(y_true, y_pred):
    return calculate_loss2(y_true, y_pred)