keras只会给出0.5001的精度

时间:2019-06-11 14:10:56

标签: python machine-learning keras

我正在运行带有tensorflow后端的Keras。 我尝试预测图像。

我的模型如下:

model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(50, 50, 1)))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Flatten())
model.add(Dense(1, activation='softmax'))
model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])

运行我的代码,它将在10个时期内产生此输出:

    Epoch 1/10
    24946/24946 [==============================] - 36s 1ms/sample - loss: 7.9693 - acc: 0.5001
    Epoch 2/10
    24946/24946 [==============================] - 35s 1ms/sample - loss: 7.9693 - acc: 0.5001

    ...

    Epoch 9/10
    24946/24946 [==============================] - 30s 1ms/sample - loss: 7.9693 - acc: 0.5001
    Epoch 10/10
    24946/24946 [==============================] - 30s 1ms/sample - loss: 7.9693 - acc: 0.5001
    1/1 [==============================] - 0s 36ms/step
    [[1.]]

无论如何,我不明白为什么在所有10个历元中精度总是0.5001

我的问题是: 为什么准确性在任何时期都不会改变?

1 个答案:

答案 0 :(得分:1)

这部分代码没有意义:

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

由于归一化,只有一个神经元的Softmax总是产生常数1.0的输出。如果要进行二进制分类,则应在输出中使用sigmoid激活。