我正在研究超分辨率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)
答案 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个输入(img_lr,img_hr)和2个输出(有效性,fake_features)的模型。因此,combined.compile(loss=['binary_crossentropy', 'mse']...
使用binary_crossentropy损失以确保有效性,并使用均方误差作为fake_features。