我正在使用带有张量流的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
,因为它用于测试)。有人能告诉我如何实现这一目标,或者让我放心,代码实际上是按照我想要的方式进行的吗?
答案 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)