Я хочу использовать caffe с векторной меткой, а не целой. Я проверил несколько ответов, и, кажется, HDF5 - лучший способ. Но тогда я застрял в ошибке:
outer_num_ * inner_num_ == bottom[1]->count()
: 34] Ошибка проверки:outer_num_ * inner_num_ == bottom[1]->count()
(50 против 200) Количество меток должно соответствовать числу прогнозов; например, если ось меток == 1 и форма прогнозирования (N, C, H, W), количество меток (количество меток) должно бытьN*H*W
, с целыми значениями в {0, 1,..., С-1}.
с HDF5 создан как:
f = h5py.File('train.h5', 'w')
f.create_dataset('data', (1200, 128), dtype='f8')
f.create_dataset('label', (1200, 4), dtype='f4')
Моя сеть генерируется:
def net(hdf5, batch_size):
n = caffe.NetSpec()
n.data, n.label = L.HDF5Data(batch_size=batch_size, source=hdf5, ntop=2)
n.ip1 = L.InnerProduct(n.data, num_output=50, weight_filler=dict(type='xavier'))
n.relu1 = L.ReLU(n.ip1, in_place=True)
n.ip2 = L.InnerProduct(n.relu1, num_output=50, weight_filler=dict(type='xavier'))
n.relu2 = L.ReLU(n.ip2, in_place=True)
n.ip3 = L.InnerProduct(n.relu1, num_output=4, weight_filler=dict(type='xavier'))
n.accuracy = L.Accuracy(n.ip3, n.label)
n.loss = L.SoftmaxWithLoss(n.ip3, n.label)
return n.to_proto()
with open(PROJECT_HOME + 'auto_train.prototxt', 'w') as f:
f.write(str(net('/home/romulus/code/project/train.h5list', 50)))
with open(PROJECT_HOME + 'auto_test.prototxt', 'w') as f:
f.write(str(net('/home/romulus/code/project/test.h5list', 20)))
Кажется, я должен увеличить количество меток и поместить вещи в целое число, а не в массив, но если я это сделаю, то caffe жалуется, что число данных и метка не равно, а затем существует.
Итак, каков правильный формат для подачи данных с несколькими метками?
Кроме того, я так удивляюсь, почему никто просто не просто пишет формат данных, как HDF5 сопоставляет с капотами?