【发布时间】:2015-08-18 18:25:44
【问题描述】:
在阅读 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 会导致问题?
【问题讨论】:
-
澄清一下,您是在问它与
[...]一起使用而不是在没有它的情况下,还是在问为什么它与z3一起使用而不是z4?您在两个示例中都没有做同样的事情,因为其中一个在分配目标的末尾有[...]而另一个没有。
标签: python numpy attributes caffe pycaffe