gpt4 book ai didi

python - Keras 中 sigmoid 激活函数的使用

转载 作者:行者123 更新时间:2023-12-02 20:11:21 26 4
gpt4 key购买 nike

我有一个由 18260 个输入字段和 4 个输出组成的大数据集。我正在使用 Keras 和 Tensorflow 构建一个可以检测可能输出的神经网络。

但是我尝试了很多解决方案,但除非我在除第一个层之外的所有模型层中使用 sigmoid 激活函数,否则准确率不会超过 55%,如下所示:

def baseline_model(optimizer= 'adam' , init= 'random_uniform'):
# create model
model = Sequential()
model.add(Dense(40, input_dim=18260, activation="relu", kernel_initializer=init))
model.add(Dense(40, activation="sigmoid", kernel_initializer=init))
model.add(Dense(40, activation="sigmoid", kernel_initializer=init))
model.add(Dense(10, activation="sigmoid", kernel_initializer=init))
model.add(Dense(4, activation="sigmoid", kernel_initializer=init))
model.summary()
# Compile model
model.compile(loss='sparse_categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])
return model

在所有层中使用 sigmoid 进行激活是否正确?如上图所示,使用 sigmoid 时,准确率达到 99.9%。所以我想知道模型实现是否有问题。

最佳答案

sigmoid 可能有效。但我建议使用 relu 激活来激活隐藏层。问题是,你的输出层的激活是 sigmoid,但它应该是 softmax(因为你使用的是稀疏_分类_交叉熵损失)。

model.add(Dense(4, activation="softmax", kernel_initializer=init))

对评论进行讨论后进行编辑

您的输出是类标签的整数。 Sigmoid 逻辑函数输出 (0,1) 范围内的值。 softmax 的输出也在范围 (0,1) 内,但 Softmax 函数对输出添加了另一个约束:- 输出之和必须为 1。因此,softmax 的输出可以解释为输入的概率每堂课。

例如


def sigmoid(x):
return 1.0/(1 + np.exp(-x))

def softmax(a):
return np.exp(a-max(a))/np.sum(np.exp(a-max(a)))

a = np.array([0.6, 10, -5, 4, 7])
print(sigmoid(a))
# [0.64565631, 0.9999546 , 0.00669285, 0.98201379, 0.99908895]
print(softmax(a))
# [7.86089760e-05, 9.50255231e-01, 2.90685280e-07, 2.35544722e-03,
4.73104222e-02]
print(sum(softmax(a))
# 1.0

关于python - Keras 中 sigmoid 激活函数的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53553797/

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