【问题标题】:Python: DeprecationWarning: elementwise == comparison failed; this will raise an error in the futurePython:弃用警告:元素 == 比较失败;这将在未来引发错误
【发布时间】:2017-11-18 08:54:31
【问题描述】:

我在将模型的预测与训练集的标签进行比较时遇到了问题。我使用的数组有形状:

训练集 (200000, 28, 28) (200000,)
验证集 (10000, 28, 28) (10000,)
测试集 (10000, 28, 28) (10000,)

但是,当使用函数检查准确性时:

def accuracy(predictions, labels):
    return (100.0 * np.sum(np.argmax(predictions, 1) == np.argmax(labels, 1))
          / predictions.shape[0])

它给了我:

C:\Users\Arslan\Anaconda3\lib\site-packages\ipykernel_launcher.py:5: DeprecationWarning: elementwise == 比较失败;这将在未来引发错误。 """

它给出了所有数据集的准确度为 0%。

我认为我们无法使用 '==' 比较数组。我怎样才能以正确的方式比较数组?

【问题讨论】:

    标签: python numpy machine-learning comparison logistic-regression


    【解决方案1】:

    我假设错误发生在这个表达式中:

    np.sum(np.argmax(predictions, 1) == np.argmax(labels, 1))
    

    你能告诉我们关于predictionslabels这两个数组的一些信息吗?通常的东西 - dtype,形状,一些样本值。也许多走一步,为每个人显示np.argmax(...)

    numpy 中,您可以比较大小相同的数组,但比较大小不匹配的数组变得更加挑剔:

    In [522]: np.arange(10)==np.arange(5,15)
    Out[522]: array([False, False, False, False, False, False, False, False, False, False], dtype=bool)
    In [523]: np.arange(10)==np.arange(5,14)
    /usr/local/bin/ipython3:1: DeprecationWarning: elementwise == comparison failed; this will raise an error in the future.
      #!/usr/bin/python3
    Out[523]: False
    

    【讨论】:

    • 谢谢。两个矩阵的维度搞砸了。重新排列矩阵中的元素后,一切顺利。
    【解决方案2】:

    这个错误告诉你你正在执行的比较没有意义,因为两个数组有不同的形状,因此它不能执行元素比较。这是一个例子:

    x = np.random.randint(0,5,(3,2))
    y = np.random.randint(0,5,(5,7))
    

    尝试执行x==y 将产生:

    DeprecationWarning:元素比较失败;这将在未来引发错误。 x==y

    正确的做法是使用np.array_equal,它会检查形状和元素是否相等:

    np.array_equal(x,y)
    # False
    

    对于浮点数,np.allclose 更适合,因为它允许控制比较结果的相对和绝对容差。这是一个例子:

    x = np.random.random((400,34))
    y = x.round(6)
    
    np.array_equal(x,y)
    # False
    np.allclose(x,y)
    # False
    np.allclose(x,y, atol=1e-05)
    # True
    

    【讨论】:

    • 但是如果我想要不同元素的数量呢?
    【解决方案3】:

    我通过将 python 升级到 3.6.4(最新)解决了这个问题

    conda update python
    

    【讨论】:

    • 这对我没有帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-07-26
    • 2020-04-07
    • 2017-04-01
    • 2021-03-04
    • 1970-01-01
    • 2020-02-15
    • 2017-05-12
    • 2020-03-04
    相关资源
    最近更新 更多