gpt4 book ai didi

python - 激活函数 : Softmax vs Sigmoid

转载 作者:行者123 更新时间:2023-12-04 08:25:58 25 4
gpt4 key购买 nike

我一直在尝试用 CNN 构建一个图像分类器。我的数据集中有 2300 张图像,分为两类:男性和女性。这是我使用的模型:

early_stopping = EarlyStopping(min_delta = 0.001, patience = 30, restore_best_weights = True)
model = tf.keras.Sequential()

model.add(tf.keras.layers.Conv2D(256, (3, 3), input_shape=X.shape[1:], activation = 'relu'))

model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.Conv2D(256, (3, 3), input_shape=X.shape[1:], activation = 'relu'))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.Flatten()) # this converts our 3D feature maps to 1D feature vectors

model.add(tf.keras.layers.Dense(64))

model.add(tf.keras.layers.Dense(1, activation='softmax'))


model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])

h= model.fit(xtrain, ytrain, validation_data=(xval, yval), batch_size=32, epochs=30, callbacks = [early_stopping], verbose = 0)
该模型的准确度为 0.501897 和损失 7.595693(模型在每个时期都停留在这些数字上)但如果我用 Sigmoid 替换 Softmax 激活,准确度约为 0.98,损失为 0.06。为什么Softmax会发生这种奇怪的事情?我能找到的所有信息是这两个激活是相似的,softmax 甚至更好,但我找不到关于这种异常的任何信息。如果有人能解释问题所在,我会很高兴。

最佳答案

结果摘要:

  • a) 带有 Softmax 激活函数的 CNN -> 准确率 ~ 0.50,损失 ~ 7.60
  • b) 带有 Sigmoid 激活函数的 CNN -> 准确率 ~ 0.98,损失 ~ 0.06

  • TLDR
    更新:
    现在我也看到你是 Softmax 仅使用 1 个输出神经元,您将无法捕获第二类 在二元分类中。 使用 Softmax,您需要在输出层中定义 K 个神经元 - 其中 K 是您要预测的类别数。而对于 Sigmoid:1 个输出神经元足以进行二元分类。
    所以简而言之,当对 2 个类使用 softmax 时,这应该在你的代码中改变:
    #use 2 neurons with softmax
    model.add(tf.keras.layers.Dense(2, activation='softmax'))
    此外:
    做的时候 二元分类 , sigmoid 函数更适合 因为它只是 计算上更有效 与更通用的 softmax 函数(当您有 K>2 个类时通常用于多类预测)相比。

    延伸阅读:
    选定激活函数的一些属性
    如果上面的简短回答对你来说还不够,我可以和你分享一些我从我对神经网络激活函数的研究中学到的一些东西:
    首先,让我们清楚术语激活和激活函数

    activation (alpha): is the state of a neuron. The state of neurons in hidden or output layers will be quantified by the weighted sum of input signals from a previous layer


    activation function f(alpha): Is a function that transforms an activation to a neuron signal. Usually a non-linear and differentiable function as for instance the sigmoid function. Many applications & research has been applied with the sigmoid function (see Bengio & Courville, 2016, p.67 ff.). Mostly the same activation function is being used throughout the neural network, but it is possible to use multiple (e.g. different ones in different layers).


    现在来看看激活函数的效果:

    The choice of activation function can have an immense impact on learning of neural networks (as you have seen in your example). Historically it was common to use the sigmoid function, as it was a good function to depict a saturated neuron. Today, especially in CNNs other activation functions, also only partially linear activation functions (like relu) is being preferred over sigmoid function. There are many different functions, just to name some: sigmoid, tanh, relu, prelu, elu ,maxout, max, argmax, softmax etc.


    现在我们只比较 sigmoid、relu/maxout 和 softmax:
    # pseudo code / formula
    sigmoid = f(alpha) = 1 / (1 + exp(-alpha))
    relu = f(alpha) = max(0,alpha)
    maxout = f(alpha) = max(alpha1, alpha2)
    softmax = f(alpha_j) = alpha_j / sum_K(alpha_k)
    乙状结肠:
  • 在二分类中最好用于输出层
  • 值可以介于 [0,1] 之间,适用于概率解释 (+)
  • 饱和神经元可以消除梯度(-)
  • 不以零为中心 (-)
  • exp() 在计算上很昂贵 (-)

  • 回复:
  • 阳性区域没有饱和神经元 (+)
  • 计算成本更低 (+)
  • 不以零为中心 (-)
  • 负区域中的饱和神经元 (-)

  • 最大输出:
  • relu (+) 的正面属性
  • 将每个神经元的参数数量加倍,通常需要增加学习努力 (-)

  • 软最大:
  • bee 可以看作是 sigmoid 函数的推广
  • 主要用作多类预测问题中的输出激活函数
  • 值范围在 [0,1] 之间,适用于概率解释 (+)
  • 由于 exp() 项 (-)
  • 在计算上更昂贵

    一些很好的引用资料供进一步阅读:
  • http://cs231n.stanford.edu/2020/syllabus
  • http://deeplearningbook.org (Bengio & Courtville)
  • https://arxiv.org/pdf/1811.03378.pdf
  • https://papers.nips.cc/paper/2018/file/6ecbdd6ec859d284dc13885a37ce8d81-Paper.pdf
  • 关于python - 激活函数 : Softmax vs Sigmoid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65258468/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com