繁体   English   中英

具有多个输出的 CNN 损失?

[英]CNN loss with multiple outputs?

我有以下 model

def get_model():
epochs = 100
learning_rate = 0.1
decay_rate = learning_rate / epochs

inp = keras.Input(shape=(64, 101, 1), name="inputs")
x = layers.Conv2D(128, kernel_size=(3, 3), strides=(3, 3), padding="same")(inp)
x = layers.Conv2D(256, kernel_size=(3, 3), strides=(3, 3), padding="same")(x)
x = layers.Flatten()(x)
x = layers.Dense(150)(x)
x = layers.Dense(150)(x)
out1 = layers.Dense(40000, name="sf_vec")(x)
out2 = layers.Dense(128, name="ls_weights")(x)

model = keras.Model(inp, [out1, out2], name="2_out_model")

model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=decay_rate),  # in caso rimettere 0.001
              loss="mean_squared_error")

keras.utils.plot_model(model, to_file='model.png', show_shapes=True, show_layer_names=True)
model.summary()

return model

在此处输入图像描述

也就是说,我想根据第一个 output 的损失和第二个 output 的损失的“混合”来训练我的神经网络。 我以这种方式训练我的神经网络:

model.fit(x_train, [sf_train, ls_filters_train], epochs=10)

例如,在训练期间,显示如下: Epoch 10/10 -> loss: 0.0702 - sf_vec_loss: 0.0666 - ls_weights_loss: 0.0035

我想知道“损失”是否几乎是 sf_vec_loss 和 ls_weights_loss 之间的总和,或者 keras 实际上是否以这种方式推理。 此外,网络是否仅针对“损失”进行训练? 先感谢您:)

遵循 Tensorflow 文档...

loss论点:

如果 model 有多个输出,您可以通过传递字典或损失列表在每个 output 上使用不同的损失。 model 将最小化的损耗值将是所有单个损耗的总和

另请记住,您还可以加权不同 model 输出的损失贡献

loss_weights参数:

model 将最小化的损失值将是所有单个损失的加权总和,由 loss_weights 系数加权

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM