Keras只培训特定的产出

Dal*_*eme 6 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)
Run Code Online (Sandbox Code Playgroud)

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

Nas*_*Ben 14

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

model1 = Model(input=input, output=[out1,out2])
model2 = Model(input=input, output=[out1,out2,out3])
Run Code Online (Sandbox Code Playgroud)

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

这有帮助吗?:-)

  • 当然,在创建模型对象时会发生什么,它正在编译图形中从输入节点到输出节点的所有图层...如果在两个模型之间存在您在另一个模型中训练的图层,则会训练它们的权重.这就是功能API和图层/模型对象的强大功能:-) (2认同)