【问题标题】:'bool' object has no attribute 'shape'“布尔”对象没有属性“形状”
【发布时间】:2018-11-22 04:24:53
【问题描述】:

我正在训练一个神经网络,我的部分代码返回了以下错误:

def plot_confusion_matrix(truth,
                          predictions,
                          classes,
                          normalize=False,
                          save=False,
                          cmap=plt.cm.Oranges,
                          path="confusion_matrix.png"):

    acc = (np.array(truth) == np.array(predictions))
    size = float(acc.shape[0]) #error
    acc = np.sum(acc.astype("int32")) / size
    (...)




AttributeError: 'bool' object has no attribute 'shape'

函数调用

pred = pred.numpy()
plot_confusion_matrix(truth=labels.numpy(),
                      predictions=pred,
                      save=False,
                      path="logref_confusion_matrix.png",
                      classes=["forward", "left", "right"])

其中 thuth 表示 Y 的标签,并预测预测数组,形状均为 32、3。我检查了 numpy、ipython 等的更新,都更新了,尝试了一些修改,但没有成功。

【问题讨论】:

  • 你对acc.shape有什么看法?
  • 我编辑了我的问题,以防 acc.shape 用于规范化 de acc

标签: python-3.x numpy neural-network jupyter-notebook


【解决方案1】:

acc 是一个布尔值而不是一个 numpy 布尔值数组的唯一原因是您传递了一个奇异值来表示真值和预测。在您提供的代码中,实际的 32x3 数组不会有错误。查看您的其余代码,并确保您实际上将数组传递给 np.array() 而不是奇异值。

【讨论】:

  • 我编辑了问题以指示函数调用,如您所见,我将其称为 np.array ()
  • 这是由您的代码中的其他错误引起的。您可以通过在解释器中使用值 np.zeros((32,3)) 进行预测和真相,然后尝试值 3 和 5 来看到这一点。 (np.array(3) == np.array(5))返回布尔值 false,它不是 numpy 数组,因此没有形状。您的问题是该比较行没有比较实际数组,因此您需要稍微追溯您的代码以查看发生了什么。打印出方法中的值或使用 type 函数查看传入的内容可能有助于调试,但您提供的内容不足以调试。
猜你喜欢
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 2014-01-27
  • 2021-09-05
  • 2016-05-09
  • 2015-05-07
  • 2017-02-11
  • 2020-04-24
相关资源
最近更新 更多