为什么在启用 from_logits 的情况下使用 BinaryCrossEntropy 会导致生成器损失?

问题描述 投票:0回答:1

从一个简单的普通 GAN 代码中,我从 GitHub

查看

我看到了这个带有激活的发电机模型

sigmoid

# Generator
G = tf.keras.models.Sequential([
  tf.keras.layers.Dense(28*28 // 2, input_shape = (z_dim,), activation='relu'),
  tf.keras.layers.Dense(28*28, activation='sigmoid'),
  tf.keras.layers.Reshape((28, 28))])

启用

G
时,
from_logits
的损失定义如下:

cross_entropy = tf.keras.losses.BinaryCrossentropy(from_logits = True)
def G_loss(D, x_fake):
  return cross_entropy(tf.ones_like(D(x_fake)), D(x_fake))

据我所知,

from_logits=True
旨在使损失函数接受范围在
y_pred
-infinity
之间的
infinity
值。与
from_logits=False
相反,损失函数假设值范围在
0
1
之间。

如您所见,

G
模型的输出层已经具有
sigmoid
激活,其范围在
0
1
之间。

但是,为什么作者仍然使用

from_logits=True

python tensorflow machine-learning keras loss-function
1个回答
0
投票

作者将输出视为连续值

from_logits=True
表示模型将其值输出为概率。该范围与 logits 状态无关。 sigmoid 函数将输出限制在
0
1
之间。在这种情况下,
Logits=True
意味着作者希望将输出视为连续值而不是概率。

© www.soinside.com 2019 - 2024. All rights reserved.