python - 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],...
我该如何解决?
解决方案
很可能,您的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
推荐阅读
- python - 我们如何在 pandas 数据帧上将列先前值(大于、等于或小于)转换为 (1, 0, -1)?
- arduino - `__vector_3' 的多重定义
- javascript - 如何让事件监听器暂时暂停?
- javascript - 加载 ReactJS 页面时发送的 API 请求过多
- jquery - 来自 uload 图像的 laravel 和使用 jquery 的实时预览似乎坏了
- java - spring-cloud-aws-context 2.2.6.RELEASE 中的“ResourceLoaderBeanPostProcessor”?从版本 1.2.1.RELEASE 升级
- laravel - 在 laravel 中加入查询,在表中没有公用
- javascript - 添加过渡到 Chrome 地址栏主题颜色更改
- laravel - 如何在同一个多态模型中设置一对一和一对多的关系
- node.js - page.evaluate 用于动态网页抓取的 puppeteer 函数的参数