Python 在Keras中训练分类问题时,神经网络的精度始终为0

Python 在Keras中训练分类问题时,神经网络的精度始终为0,python,tensorflow,machine-learning,keras,neural-network,Python,Tensorflow,Machine Learning,Keras,Neural Network,我正在为泰坦尼克号分类问题制作一个神经网络,但我的训练精度始终为0。我检查了其他解决方案,但找不到有效的解决方案。损失减少,但精度为0 model= keras.Sequential( [ layers.Dense(10,activation="relu",input_shape=(8,)), layers.Dense(10,activation="relu"), layers.Dense(1,activation=&

我正在为泰坦尼克号分类问题制作一个神经网络,但我的训练精度始终为0。我检查了其他解决方案,但找不到有效的解决方案。损失减少,但精度为0

model= keras.Sequential(
    [
     layers.Dense(10,activation="relu",input_shape=(8,)),
     layers.Dense(10,activation="relu"),
     layers.Dense(1,activation="sigmoid")
    ]
)

model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['Accuracy'])
model.fit(X_train,y_train,batch_size=64,epochs=200,verbose=2)
输入没有任何空值

Survived     0
Age          0
Fare         0
Total_mem    0
female       0
Q            0
S            0
2            0
3            0
dtype: int64
以下是一些显示0精度的值

Epoch 1/200
12/12 - 0s - loss: 0.7219 - accuracy: 0.0000e+00
Epoch 2/200
12/12 - 0s - loss: 0.7028 - accuracy: 0.0000e+00
Epoch 3/200
12/12 - 0s - loss: 0.6879 - accuracy: 0.0000e+00
Epoch 4/200
12/12 - 0s - loss: 0.6749 - accuracy: 0.0000e+00
Epoch 5/200
12/12 - 0s - loss: 0.6626 - accuracy: 0.0000e+00
Epoch 6/200
12/12 - 0s - loss: 0.6515 - accuracy: 0.0000e+00
Epoch 7/200
12/12 - 0s - loss: 0.6397 - accuracy: 0.0000e+00
Epoch 8/200
12/12 - 0s - loss: 0.6272 - accuracy: 0.0000e+00
Epoch 9/200
12/12 - 0s - loss: 0.6143 - accuracy: 0.0000e+00
Epoch 10/200
12/12 - 0s - loss: 0.6005 - accuracy: 0.0000e+00
Epoch 11/200
12/12 - 0s - loss: 0.5871 - accuracy: 0.0000e+00
Epoch 12/200
12/12 - 0s - loss: 0.5750 - accuracy: 0.0000e+00

首先,您错误地使用了
metrics=['accurity']
。第二,这指向一个更深层次的错误,我认为这是无意的。对于tensorflow回购协议。希望有人能回应

Keras不识别度量
精度
。Keras未能正确调用此处所需的MeanMetricWrapper


解决问题 修复开始显示度量值的正确值

from tensorflow import keras
from tensorflow.keras import layers

X_train = np.random.random((100,8))
y_train = np.random.randint(0,2,(100,))

model = keras.Sequential(
    [
     layers.Dense(10,activation="relu",input_shape=(8,)),
     layers.Dense(10,activation="relu"),
     layers.Dense(1,activation="sigmoid")
    ]
)

model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
model.fit(X_train,y_train,batch_size=64,epochs=5,verbose=2)
[,,
]
这里发生了一些有趣的事情。由于“准确性”不属于列表,因此,
\u get\u metric\u object
调用
metrics.get()
->
metrics.deserialize()
->
泛型实用程序。deserialize\u keras\u object()
函数,该函数只需调出
tf.keras.metrics.acity
,并直接返回,而不是调用
tf.keras.metrics.MeanMetricWrapper


这就是为什么您会得到不正确的精度值,但它不会抛出错误

它的
准确性
不是
准确性
。我投票重新开始这个问题,因为这个问题指向TF2.4代码中的一个潜在问题/错误(即使它可以通过简单的打字纠正)。请查看我的答案及其评论以了解详细信息。您所说的“不确定”是什么意思?OP显示的代码应该抛出一个错误吗?谢谢你捕捉到这一点。我正在用细节更新我的答案。更新,把我带进了一个兔子洞,但很高兴。非常感谢!提出了同样的问题。很乐意帮忙,很好的分析了问题!
Epoch 1/5
2/2 - 0s - loss: 0.6926 - accuracy: 0.5500
Epoch 2/5
2/2 - 0s - loss: 0.6915 - accuracy: 0.5500
Epoch 3/5
2/2 - 0s - loss: 0.6909 - accuracy: 0.5600
Epoch 4/5
2/2 - 0s - loss: 0.6900 - accuracy: 0.5700
Epoch 5/5
2/2 - 0s - loss: 0.6894 - accuracy: 0.5600
<tensorflow.python.keras.callbacks.History at 0x7f90e5f7d250>
#With lower case accuracy
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
print(model.metrics)
[<tensorflow.python.keras.metrics.Mean at 0x7f90c7ea10d0>,
 <tensorflow.python.keras.metrics.MeanMetricWrapper at 0x7f90c7d07e20>]
#With upper case Accuracy
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['Accuracy'])
print(model.metrics)
[<tensorflow.python.keras.metrics.Mean at 0x7f90e7285e20>,
 <tensorflow.python.keras.metrics.Accuracy at 0x7f90e72fceb0>]