当所有预测都给出完全相同的值时,您就知道您的模型没有学习,因此出了点问题!
在您的情况下,问题是具有softmax和sigmoid激活的最后一个密集层。
model.add(keras.layers.Dense(1, activation=tf.nn.softmax))
model.add(keras.layers.Activation('sigmoid'))
这会产生冲突,其中 softmax 输出1(因为只有一个节点),而 sigmoid 采用此1并计算其 sigmoid 值给出:
1/(1+exp(- 1 )) = 0.731058
还有我们的朋友!
为了解决这个问题,您只需要删除最后一个激活层,并更改 sigmoid 的 softmax,因为您的输出是二进制的:
model = keras.Sequential()
model.add(keras.layers.Conv2D(16, [3,3], activation='relu', padding='same'))
model.add(keras.layers.Conv2D(32, [3,3], activation='relu', padding='same'))
model.add(keras.layers.Conv2D(64, [3,3], activation='relu', padding='same'))
model.add(keras.layers.BatchNormalization())
model.add(keras.layers.Dropout(0.15))
model.add(keras.layers.Activation('relu'))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(50))
model.add(keras.layers.Dense(1, activation=tf.nn.sigmoid))
#model.add(keras.layers.Activation('sigmoid'))
这应该工作!