首页 > 解决方案 > ValueError:无法将输入数组从形状(110,110,3)广播到形状(110,110)

问题描述

我正在构建一个神经网络,我正在尝试将彩色图像加载到网络中,但我不断收到重塑错误。我将所有图像的大小调整为最小尺寸(在本例中为 110 x 110),但是当我尝试将 X(每个图像的像素的未展平 3d 列表)转换为一个名为 xTrain 的 numpy 数组时,这行代码:

xTrain = np.array(X[:trainNum])

我收到此错误:“ValueError:无法将输入数组从形状(110,110,3)广播到形状(110,110)”

有谁知道它为什么一直这样做?我认为这是因为我的数据,因为我的伙伴用他自己的图像复制了相同的确切代码,并且转换为 numpy 数组是成功的,但我的不是。作为参考,标题为 X 的列表采用以下格式:

[array([[[137, 151, 199],
    [ 93, 114, 166],
    [116, 121, 164],
    ...,
    [124, 124, 175],
    [160, 162, 193],
    [154, 157, 177]],

   [[ 81,  94, 153],
    [106, 123, 184],
    [119, 124, 180],...

我该如何解决?

标签: pythonnumpytensorflow

解决方案


很可能,您的X列表包含灰度和 RGB 图像的混合。


img_rgb = np.zeros((110, 110, 3))
img_gry = np.zeros((110, 110))

X_good = [img_rgb, img_rgb, img_rgb]
np.array(X_good[:])
# OK

X_bad = [img_rgb, img_gry, img_rgb]
np.array(X_bad[:])
# ValueError: could not broadcast input array from shape (110,110,3) into shape (110,110)

您可以将灰度图像转换X为 RGB:

def make_rgb(img):
    if len(img.shape) == 3:
        return img
    img3 = np.empty(img.shape + (3,))
    img3[:, :, :] = img[:, :, np.newaxis]
    return img3

X_repaired = [make_rgb(im) for im in X_bad]

np.array(X_repaired[:])
# No problem

推荐阅读