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
問題を引き起こすのですか?