我一直在测试使用不同方法来建立神经网络模型(使用tensorflow,keras),发现在编译模型时指标有些奇怪。
我检查了两种方式:
model.compile(
loss=keras.losses.CategoricalCrossentropy(),
optimizer=keras.optimizers.Adam(),
metrics=keras.metrics.Accuracy()
)
和
model.compile(
loss=keras.losses.CategoricalCrossentropy(),
optimizer=keras.optimizers.Adam(),
metrics=["accuracy"]
)
第一种方法的结果:
Epoch 1/2
1875/1875 - 2s - loss: 0.0494 - accuracy: 0.0020
Epoch 2/2
1875/1875 - 2s - loss: 0.0401 - accuracy: 0.0030
<tensorflow.python.keras.callbacks.History at 0x7f9c00bc06d8>
第二种方法的结果:
Epoch 1/2
1875/1875 - 2s - loss: 0.0368 - accuracy: 0.9884
Epoch 2/2
1875/1875 - 2s - loss: 0.0303 - accuracy: 0.9913
<tensorflow.python.keras.callbacks.History at 0x7f9bfd7d35c0>
这很奇怪,我以为“accuracy”和keras.metrics.Accuracy()是完全相同的。至少在参数“loss”和“optimizer”中是这样,例如,“adam”与keras.optimizers.Adam()相同。有人知道为什么会这么奇怪,或者我错过了什么吗?
编辑:
使用[]中的度量方法也会产生奇怪的结果:
model.compile(
loss=keras.losses.CategoricalCrossentropy(),
optimizer=keras.optimizers.Adam(),
metrics=[keras.metrics.Accuracy()]
)
Epoch 1/2
1875/1875 - 2s - loss: 0.2996 - accuracy: 0.0000e+00
Epoch 2/2
1875/1875 - 2s - loss: 0.1431 - accuracy: 1.8333e-05
<tensorflow.python.keras.callbacks.History at 0x7f9bfd1045f8>
metrics=[keras.metrics.categorical_accuracy]
。 - Nicolas Gervais