我正在运行带有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
。
我的问题是: 为什么准确性在任何时期都不会改变?
答案 0 :(得分:1)
这部分代码没有意义:
model.add(Dense(1, activation='softmax'))
由于归一化,只有一个神经元的Softmax总是产生常数1.0的输出。如果要进行二进制分类,则应在输出中使用sigmoid
激活。