Ahm*_*azi 1 python neural-network keras tensorflow sigmoid
我有一个由 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
Run Code Online (Sandbox Code Playgroud)
使用sigmoid激活在所有层是否正确?使用 sigmoid 时准确率达到 99.9%,如上所示。所以我想知道模型实现是否有问题。
sigmoid 可能会起作用。但我建议使用 relu 激活来激活隐藏层。问题是,您的输出层的激活是 sigmoid 但它应该是 softmax(因为您使用的是 sparse_categorical_crossentropy 损失)。
model.add(Dense(4, activation="softmax", kernel_initializer=init))
Run Code Online (Sandbox Code Playgroud)
您的输出是类标签的整数。Sigmoid 逻辑函数输出范围 (0,1) 内的值。softmax 的输出也在 (0,1) 范围内,但 Softmax 函数对输出添加了另一个约束:- 输出的总和必须为 1。因此,softmax 的输出可以解释为输入的概率每个班级。
例如
model.add(Dense(4, activation="softmax", kernel_initializer=init))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12534 次 |
| 最近记录: |