Keras多输入,输出,损失模型

时间:2019-10-01 20:46:53

标签: python tensorflow keras

我正在研究超分辨率GAN,并且对我在Github上找到的代码有一些疑问。特别是,我在模型中有多个输入,多个输出。另外,我有两个不同的损失函数。

在下面的代码中,是否会将mse损失应用于img_hr和fake_features?

# Build and compile the discriminator
        self.discriminator = self.build_discriminator()
        self.discriminator.compile(loss='mse',
            optimizer=optimizer,
            metrics=['accuracy'])

        # Build the generator
        self.generator = self.build_generator()

        # High res. and low res. images
        img_hr = Input(shape=self.hr_shape)
        img_lr = Input(shape=self.lr_shape)

        # Generate high res. version from low res.
        fake_hr = self.generator(img_lr)

        # Extract image features of the generated img
        fake_features = self.vgg(fake_hr)

        # For the combined model we will only train the generator
        self.discriminator.trainable = False

# Discriminator determines validity of generated high res. images
        validity = self.discriminator(fake_hr)

        self.combined = Model([img_lr, img_hr], [validity, fake_features])
        self.combined.compile(loss=['binary_crossentropy', 'mse'],
                              loss_weights=[1e-3, 1],
                              optimizer=optimizer)

2 个答案:

答案 0 :(得分:0)

  

在以下代码中,mse损失将应用于img_hr和   fake_features?

根据文档https://keras.io/models/model/#compile

如果模型具有多个输出,则可以通过传递字典或损失列表来对每个输出使用不同的损失。

在这种情况下,mse损失将应用于fake_features,并将相应的y_true作为self.combined.fit()的一部分传递。

答案 1 :(得分:0)

在神经网络中,损耗被应用于网络的输出,以便具有一种测量“此输出有多错误?”的方法。因此您可以使用此值,并通过“渐变体面”和“反向传播”将其最小化。 按照这种直觉,以角值表示的损失是一个列表,其长度与模型的输出相同。它们适用于具有相同索引的输出。

self.combined = Model([img_lr, img_hr], [validity, fake_features])

这为您提供了一个具有2个输入(im​​g_lr,img_hr)和2个输出(有效性,fake_features)的模型。因此,combined.compile(loss=['binary_crossentropy', 'mse']...使用binary_crossentropy损失以确保有效性,并使用均方误差作为fake_features。