Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python keras.metrics.accurity()和“;“准确度”;_Python_Tensorflow_Machine Learning_Keras_Deep Learning - Fatal编程技术网

Python keras.metrics.accurity()和“;“准确度”;

Python keras.metrics.accurity()和“;“准确度”;,python,tensorflow,machine-learning,keras,deep-learning,Python,Tensorflow,Machine Learning,Keras,Deep Learning,我一直在测试构建nn模型的不同方法(tensorflow、keras),我发现在编译模型的过程中度量有一些奇怪的地方 我选择了两种方式: model.compile( loss=keras.losses.CategoricalCrossentropy(), optimizer=keras.optimizers.Adam(), metrics=keras.metrics.Accuracy() ) 及 第一种方法的结果: Ep

我一直在测试构建nn模型的不同方法(tensorflow、keras),我发现在编译模型的过程中度量有一些奇怪的地方

我选择了两种方式:

    model.compile(
        loss=keras.losses.CategoricalCrossentropy(),
        optimizer=keras.optimizers.Adam(),
        metrics=keras.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>
时代1/2 1875/1875-2s-损耗:0.0494-精度:0.0020 纪元2/2 1875/1875-2s-损耗:0.0401-精度:0.0030 第二种方法的结果:

    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>
时代1/2 1875/1875-2s-损耗:0.0368-精度:0.9884 纪元2/2 1875/1875-2s-损耗:0.0303-精度:0.9913 这很奇怪,我认为“准确性”与keras.metrics.accurity()完全相同。 至少在参数“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>

model.compile(
损失=keras.loss.CategoricalCrossentropy(),
optimizer=keras.optimizers.Adam(),
metrics=[keras.metrics.accurity()]
)
纪元1/2
1875/1875-2s-损耗:0.2996-精度:0.0000e+00
纪元2/2
1875/1875-2s-损耗:0.1431-精度:1.8333e-05

这是因为您必须在列表中指定指标。试试这个:

model.compile(
        loss=keras.losses.CategoricalCrossentropy(),
        optimizer=keras.optimizers.Adam(),
        metrics=[keras.metrics.Accuracy()]
    )
你应该得到同样的结果

编辑:


keras.metrics.accurity()
计算预测的相等性与基本事实之间的准确性。在您的情况下,您需要在正确的类中计算匹配的准确性。因此,您应该根据您的问题使用
keras.metrics.BinaryAccuracy()
keras.metrics.categroicalcuracy()

当您提到
keras.metrics.Accuracy()时
您明确要求库计算度量
精度
,这是多少目标值与预测值之间的简单比较

但是,当您提到字符串
精度
时,根据您选择的损失类型,会选择不同的
度量标准
。这是Keras文件中提到的

当您传递字符串'accurity'或'acc'时,我们将其转换为tf.keras.metrics.BinaryAccuracy、tf.keras.metrics.categialAccuracy、tf.keras.metrics.sparsecategoricaccuracy中的一个,具体取决于使用的损失函数和模型输出形状。我们还对字符串“crossentropy”和“ce”进行了类似的转换。

因此,由于
CategoricalCrossEntropy
是损失,因此在案例2中计算了
categoricalaccurity
。这是基于找到argmax,然后比较一个热编码。因此,您在案例2中看到了更好的精度值,在案例1中看到了非常糟糕的精度值

因此字符串
accurity
并不总是表示度量函数
accurity()

不同指标的解释,以供参考

参数
指标的说明
供参考,

我也这么认为,但这并不能解决问题-我编辑了我的帖子,检查了文档和准确性()计算标签和pred相等的次数(不是匹配,而是相同的值),因此准确性几乎等于0。因此,如果您想通过与标签的正确匹配来计算精度,您应该尝试BinaryAccurance()(或Category Accurance())。我编辑我的答案。尝试
metrics=[keras.metrics.category\u accurity]