当前位置: 首页 > 知识库问答 >
问题:

为什么Tensorflow分类示例没有使用激活函数?

商瀚
2023-03-14

我正试图按照这里提供的指导来训练一个二元分类器,并用它来对新图像进行预测。据我所知,在二元分类器模型的末尾通常需要一个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”)上添加一个sigmoi激活函数,但这个动作大大降低了准确性。

有人能帮我理解模型的输出吗?

共有1个答案

弘靖琪
2023-03-14

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

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

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

 类似资料:
  • 本文向大家介绍为什么引入非线性激活函数?相关面试题,主要包含被问及为什么引入非线性激活函数?时的应答技巧和注意事项,需要的朋友参考一下 第一,对于神经网络来说,网络的每一层相当于f(wx+b)=f(w'x),对于线性函数,其实相当于f(x)=x,那么在线性激活函数下,每一层相当于用一个矩阵去乘以x,那么多层就是反复的用矩阵去乘以输入。根据矩阵的乘法法则,多个矩阵相乘得到一个大矩阵。所以线性激励函数

  • 它应该取消比赛,这样同一队的球员就不能互相攻击,但事实并非如此。为什么?您还可以建议创建FriendlyFire函数的其他方法。

  • 激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。 Sigmoid 也成为 S 形函数,取值范围为 (0,1)。Sigmoid 将一个实数映射到 (0,1) 的区间,可以用来做二分类。Sigmoid 在特征相差比较复杂或是相差不是特别大时效果比较好。 sigmoid 缺点: 激活函数计算量大(指数运算),反向传播求误差梯度时,求导

  • 我试着运行一个没有任何激活函数的简单神经网络,并且网络不会收敛。我正在使用MSE成本函数进行MNIST分类。 然而,如果我将校正线性激活函数应用于隐藏层(输出=max(0,x),其中x是加权和),那么它会很好地收敛。 为什么消除前一层的负面输出有助于学习?

  • 本文向大家介绍Sigmiod、Relu、Tanh三个激活函数的缺点和不足,有没有更好的激活函数?相关面试题,主要包含被问及Sigmiod、Relu、Tanh三个激活函数的缺点和不足,有没有更好的激活函数?时的应答技巧和注意事项,需要的朋友参考一下 sigmoid、Tanh、ReLU的缺点在121问题中已有说明,为了解决ReLU的dead cell的情况,发明了Leaky Relu, 即在输入小于0

  • 本文向大家介绍激活函数的作用相关面试题,主要包含被问及激活函数的作用时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 激活函数是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题。