从一个简单的普通 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
?
作者将输出视为连续值
from_logits=True
表示模型将其值输出为概率。该范围与 logits 状态无关。 sigmoid 函数将输出限制在 0
和 1
之间。在这种情况下,Logits=True
意味着作者希望将输出视为连续值而不是概率。