为什么张量流分类示例不使用激活函数?



我正在尝试按照此处提供的说明来训练二元分类器并使用它来预测新图像。据我所知,在二元分类器模型的末尾通常需要一个 Sigmoid 激活函数,以将输出限制在 0 到 1 之间的范围内,但该模型没有任何 Softmax 或 Sigmoid 函数:

model = Sequential([
Conv2D(16, 3, padding='same', activation='relu', input_shape=(IMG_HEIGHT, IMG_WIDTH ,3)),
MaxPooling2D(),
Conv2D(32, 3, padding='same', activation='relu'),
MaxPooling2D(),
Conv2D(64, 3, padding='same', activation='relu'),
MaxPooling2D(),
Flatten(),
Dense(512, activation='relu'),
Dense(1)
])

当我使用 model.predict(( 命令对新图像进行预测时,模型返回的正值和负值不限于任何范围,我不知道如何解释它们。

我还尝试在最后一个 Dense 层Dense(1, activation='sigmoid' 中添加一个 sigmoid激活函数,但此操作大大降低了准确性。

有人可以帮助我如何理解模型的输出吗?

Dense层的默认激活函数是线性函数。如果您按照本教程进行操作,您会发现他们使用带有from_logits = True参数的CrossEntropy损失来编译模型。这样,在计算损失时,来自Dense(1)层的原始预测将根据对数转换为类概率。

如果将激活切换为sigmoid则应相应地使用from_logits=False修改损失函数,以便损失函数期望的值在 [0,1] 范围内

本教程中使用from_logits=True的原因是它可以产生更稳定的数值结果(根据 TF(

最新更新