由於某些原因,HDF5的培訓在第一次開始時總會失敗,測試和列車損失可能很快會降至接近於零,因此我很難在HDF5上處理圖像分類和迴歸任務。在嘗試了所有的技巧之後,例如降低學習速度,添加RELU,退出,沒有任何東西開始工作,所以我開始懷疑我給caffe餵食的HDF5數據是錯誤的。如何向caffe或現有示例向HDF5提供圖像數據?
所以我目前正在處理通用數據集(Oxford 102 category flower dataset,它也有public code),首先我通過嘗試ImageData和LMDB層來進行分類,他們都工作得很好。最後,我使用HDF5數據層進行微調,除非使用HDF5的數據層,否則training_prototxt不會改變。再次,在學習開始時,在第60次迭代時,損失從5下降到0.14,在迭代100時損失從0.00146下降,這似乎證明HDF5數據是不正確的。
我有兩個圖像&標籤上github,他們都似乎產生了HDF5數據集,但由於某些原因,這些數據集似乎並不HDF5片段將不會與朱古力工作
不知什麼這個數據是錯誤的,或者是讓這個例子在HDF5中運行的任何東西,或者你有一些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()
您正在研究RGB圖像*而沒有任何轉換(例如,RGB-> BGR,平均減法等),可能是您的訓練模型使用某些轉換進行了訓練。 – Shai
調試這種方法的一種方法是拍攝'X'圖像,將它們轉換爲'lmdb'並將它們存儲到HDF5。建立一個具有兩個輸入層的網絡:一個讀取lmdb,另一個讀取HDF5。然後添加一個比較兩個輸入圖像的「EucleadeanLoss」圖層。這應該表明兩個圖像是否相同。可能是 – Shai
。我將如何做Caffe HDF5 Layer中的減法,在LMDB層中,我可以在prototxt中配置'transform_param> mean_file'。 – user824624