gpt4 book ai didi

python - 为什么在 PyCaffe 中将 ndarray 分配给 ndarray 会引发属性错误?

转载 作者:行者123 更新时间:2023-11-28 19:55:02 25 4
gpt4 key购买 nike

在阅读 Caffe 教程 ( http://nbviewer.ipython.org/github/BVLC/caffe/blob/master/examples/00-classification.ipynb ) 时,我遇到了以下语句:

net.blobs['data'].data[...] = transformer.preprocess('data',
caffe.io.load_image
(caffe_root + 'examples/images/cat.jpg'))

它基本上用于将单个图像分配给 net.blobs['data'].data

net.blobs['data'].data[...] 是一个 4D ndarray,transformer... 返回一个 3D ndarray,所以省略号在第 0 轴上复制 3D 数组。这让我觉得我应该能够重写代码以避免省略号,如下所示:

z3=transformer.preprocess('data', 
caffe.io.load_image
(caffe_root + 'examples/images/cat.jpg'))

z4 = z3[np.newaxis,...]
net.blobs['data'].data = z4

但是,当我这样做的时候,我得到了

>> net.blobs['data'].data = z4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: can't set attribute

虽然,

net.blobs['data'].data[...] = z3

工作正常。这对任何人都有意义吗?

我已经验证了变量的形状和类型,如下所示:

>>> print net.blobs['data'].data.shape, z3.shape, z4.shape
(1, 3, 227, 227) (3, 227, 227) (1, 3, 227, 227)

>>> print type(net.blobs['data'].data),type(z3),type(z4)
<type 'numpy.ndarray'> <type 'numpy.ndarray'> <type 'numpy.ndarray'>

为什么 net.blobs['data'].data = z4 会导致问题?

最佳答案

正在做 obj.attr = blah正在为对象设置属性 obj , 所以 obj控制这个。做obj.attr[...] = blah正在 obj.attr 引用的对象上设置一个 item(例如,一些类似数组的对象的“内容”) , 所以对象 obj.attr控制这个。

在您的示例中,net.blobs['data']是某种不允许其 data 的对象要设置的属性,所以你不能做 net.blobs['data'].data = blah .但是net.blobs['data'].data是一个确实允许您更改其内容的数组,因此您可以执行 net.blobs['data'].data[...] = stuff .您正在使用这两种语法对两个不同的对象进行操作(一种情况下为 net.blobs['data'],另一种情况下为 net.blobs['data'].data)。

关于python - 为什么在 PyCaffe 中将 ndarray 分配给 ndarray 会引发属性错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32080017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com