При чтении с помощью обучающей программы Caffe (http://nbviewer.ipython.org/github/BVLC/caffe/blob/master/examples/00-classification.ipynb), я наткнулся на следующее утверждение:Почему назначение ndarray в ndarray в PyCaffe вызывает ошибку атрибута?
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, поэтому эллипсис служит для копирования 3D-массива на 0-ю ось. Это заставило меня думать, что я должен быть в состоянии переписать код, чтобы избежать многоточие следующим образом:
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'? Вы не делаете то же самое в обоих своих примерах, потому что один из них имеет '[...]' в конце целевого назначения, а другой - нет. – BrenBarn