首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在尝试从咖啡馆中的通道智能均值中减去时,收到"ValueError: operands in with broadcast with shapes“

在尝试从咖啡馆中的通道智能均值中减去时,收到"ValueError: operands in with broadcast with shapes“
EN

Stack Overflow用户
提问于 2017-07-25 23:23:00
回答 2查看 4.5K关注 0票数 1

这是this的后续问题。基本上,我想做的是简单地从平均值中减去每一幅图像。

基于GitHubthis other similar question上的这个问题,以及当我们将图像的裁剪版本提供给网络时的this classification example,我们需要使用如下内容减去平均像素:

代码语言:javascript
复制
mu = mean_file.mean(1).mean(1)

但讽刺的是,当我想这么做的时候:

代码语言:javascript
复制
.. = (img[:,0:224,0:224] - mu)

我得到了ValueError: operands could not be broadcast together with shapes (3,224,224) (3,)。我不太精通Python和Numpy,也不知道这个错误消息想要传达什么。

目前,我正在裁剪均值文件,这并不理想,但总比没有好。

代码语言:javascript
复制
.. = (img[:,0:224,0:224] - mean_image[:,0:224,0:224])
EN

回答 2

Stack Overflow用户

发布于 2017-07-25 23:26:43

替换

代码语言:javascript
复制
mu = mean_file.mean(1).mean(1)

使用

代码语言:javascript
复制
mu = mean_file.mean(1).mean(1)[:,None,None]

看起来你正在尝试从一个3D数组中减去一个一维向量(shape of (3,)) (shape of (3,224,224))。为此,numpy需要将一维向量broadcast到3D数组的维度中(很像Matlab的bsxfun)。为了帮助numpy了解要广播的维度,需要将单个维度添加到1D向量中:

代码语言:javascript
复制
mu[:,None,None]

现在的形状是(3,1,1),这应该使numpy能够正确地执行减法。

票数 1
EN

Stack Overflow用户

发布于 2017-07-26 22:42:40

我注意到,由于我正在读取lmdb上的图像,为了让一切正常工作,我必须执行以下操作:

代码语言:javascript
复制
img = np.array(img.transpose(2,1,0),dtype=np.float32)
img -= mean_image[0].mean(1).mean(1)
#transpose back to the original state
img = img.transpose(2,1,0) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45307525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档