在图像分类和回归任务上,我很难使用 HDF5 使用 caffe,由于某种原因,在 HDF5 上的训练总是会在一开始就失败,测试和训练损失可能很快就会下降到接近于零。在尝试了降低学习率、添加 RELU、dropout 等所有技巧之后,什么都没有开始工作,所以我开始怀疑我提供给 caffe 的 HDF5 数据是错误的。
所以目前我正在研究通用数据集(牛津 102 类别花卉数据集,它也有公共代码),首先我尝试 ImageData 和 LMDB 层进行分类,它们都运行得很好。最后我使用 HDF5 数据层进行微调,training_prototxt 不会改变,除非在使用 HDF5 的数据层上。再一次,在学习开始时,在第 60 次迭代时,损失从 5 下降到 0.14,在第 100 次迭代时下降到 0.00146,这似乎证明了 HDF5 数据不正确。
我在github上有两个 HDF5 片段的图像和标签,它们似乎都生成了 HDF5 数据集,但由于某种原因,这些数据集似乎不适用于 caffe
我想知道这些数据有什么问题,或者让这个示例在 HDF5 中运行的任何问题,或者您是否有一些用于分类或回归的 HDF5 示例,这对我很有帮助。
一个片段显示为
def generateHDF5FromText2(label_num):
print '\nplease wait...'
HDF5_FILE = ['hdf5_train.h5', 'hdf5_test1.h5']
#store the training and testing data path and labels
LIST_FILE = ['train.txt','test.txt']
for kk, list_file in enumerate(LIST_FILE):
#reading the training.txt or testing.txt to extract the all the image path and labels, store into the array
path_list = []
label_list = []
with open(list_file, buffering=1) as hosts_file:
for line in hosts_file:
line = line.rstrip()
array = line.split(' ')
lab = int(array[1])
label_list.append(lab)
path_list.append(array[0])
print len(path_list), len(label_list)
# init the temp data and labels storage for HDF5
datas = np.zeros((len(path_list),3,227,227),dtype='f4')
labels = np.zeros((len(path_list), 1),dtype="f4")
for ii, _file in enumerate(path_list):
# feed the image and label data to the TEMP data
img = caffe.io.load_image( _file )
img = caffe.io.resize( img, (227, 227, 3) ) # resize to fixed size
img = np.transpose( img , (2,0,1))
datas[ii] = img
labels[ii] = int(label_list[ii])
# store the temp data and label into the HDF5
with h5py.File("/data2/"+HDF5_FILE[kk], 'w') as f:
f['data'] = datas
f['label'] = labels
f.close()