use*_*262 2 python attributes numpy caffe pycaffe
阅读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'))
Run Code Online (Sandbox Code Playgroud)
它主要用于分配单个图像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
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我明白了
>> net.blobs['data'].data = z4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: can't set attribute
Run Code Online (Sandbox Code Playgroud)
即使,
net.blobs['data'].data[...] = z3
Run Code Online (Sandbox Code Playgroud)
工作良好.这对任何人都有意义吗?
我已经验证了变量的形状和类型如下:
>>> 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'>
Run Code Online (Sandbox Code Playgroud)
为什么会net.blobs['data'].data = z4引起问题?
Bre*_*arn 10
这样做obj.attr = blah是在对象上设置一个属性obj,所以obj控制这一点.正在做的obj.attr[...] = blah是在被引用的对象上设置项目(例如,某些类似数组的对象的"内容")obj.attr,因此对象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在另一种情况下)操作两个不同的对象.
| 归档时间: |
|
| 查看次数: |
1046 次 |
| 最近记录: |