這篇文章主要為大家展示了如何使用Keras預(yù)訓練模型ResNet50進行圖像分類,內(nèi)容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

Keras提供了一些用ImageNet訓練過的模型:Xception,VGG16,VGG19,ResNet50,InceptionV3。在使用這些模型的時候,有一個參數(shù)include_top表示是否包含模型頂部的全連接層,如果包含,則可以將圖像分為ImageNet中的1000類,如果不包含,則可以利用這些參數(shù)來做一些定制的事情。
在運行時自動下載有可能會失敗,需要去網(wǎng)站中手動下載,放在“~/.keras/models/”中,使用WinPython則在“settings/.keras/models/”中。
修正:表示當前是訓練模式還是測試模式的參數(shù)K.learning_phase()文中表述和使用有誤,在該函數(shù)說明中可以看到:
The learning phase flag is a bool tensor (0 = test, 1 = train),所以0是測試模式,1是訓練模式,部分網(wǎng)絡(luò)結(jié)構(gòu)下兩者有差別。
這里使用ResNet50預(yù)訓練模型,對Caltech201數(shù)據(jù)集進行圖像分類。只有CPU,運行較慢,但是在訓練集固定的情況下,較慢的過程只需要運行一次。
該預(yù)訓練模型的中文文檔介紹在http://keras-cn.readthedocs.io/en/latest/other/application/#resnet50。
我使用的版本:
1.Ubuntu 16.04.3
2.Python 2.7
3.Keras 2.0.8
4.Tensoflow 1.3.0
5.Numpy 1.13.1
6.python-opencv 2.4.9.1+dfsg-1.5ubuntu1
7.h6py 2.7.0
從文件夾中提取圖像數(shù)據(jù)的方式:
函數(shù):
def eachFile(filepath): #將目錄內(nèi)的文件名放入列表中
pathDir = os.listdir(filepath)
out = []
for allDir in pathDir:
child = allDir.decode('gbk') # .decode('gbk')是解決中文顯示亂碼問題
out.append(child)
return out
def get_data(data_name,train_left=0.0,train_right=0.7,train_all=0.7,resize=True,data_format=None,t=''): #從文件夾中獲取圖像數(shù)據(jù)
file_name = os.path.join(pic_dir_out,data_name+t+'_'+str(train_left)+'_'+str(train_right)+'_'+str(Width)+"X"+str(Height)+".h6")
print file_name
if os.path.exists(file_name): #判斷之前是否有存到文件中
f = h6py.File(file_name,'r')
if t=='train':
X_train = f['X_train'][:]
y_train = f['y_train'][:]
f.close()
return (X_train, y_train)
elif t=='test':
X_test = f['X_test'][:]
y_test = f['y_test'][:]
f.close()
return (X_test, y_test)
else:
return
data_format = conv_utils.normalize_data_format(data_format)
pic_dir_set = eachFile(pic_dir_data)
X_train = []
y_train = []
X_test = []
y_test = []
label = 0
for pic_dir in pic_dir_set:
print pic_dir_data+pic_dir
if not os.path.isdir(os.path.join(pic_dir_data,pic_dir)):
continue
pic_set = eachFile(os.path.join(pic_dir_data,pic_dir))
pic_index = 0
train_count = int(len(pic_set)*train_all)
train_l = int(len(pic_set)*train_left)
train_r = int(len(pic_set)*train_right)
for pic_name in pic_set:
if not os.path.isfile(os.path.join(pic_dir_data,pic_dir,pic_name)):
continue
img = cv2.imread(os.path.join(pic_dir_data,pic_dir,pic_name))
if img is None:
continue
if (resize):
img = cv2.resize(img,(Width,Height))
img = img.reshape(-1,Width,Height,3)
if (pic_index < train_count):
if t=='train':
if (pic_index >= train_l and pic_index < train_r):
X_train.append(img)
y_train.append(label)
else:
if t=='test':
X_test.append(img)
y_test.append(label)
pic_index += 1
if len(pic_set) <> 0:
label += 1
f = h6py.File(file_name,'w')
if t=='train':
X_train = np.concatenate(X_train,axis=0)
y_train = np.array(y_train)
f.create_dataset('X_train', data = X_train)
f.create_dataset('y_train', data = y_train)
f.close()
return (X_train, y_train)
elif t=='test':
X_test = np.concatenate(X_test,axis=0)
y_test = np.array(y_test)
f.create_dataset('X_test', data = X_test)
f.create_dataset('y_test', data = y_test)
f.close()
return (X_test, y_test)
else:
return
分享名稱:如何使用Keras預(yù)訓練模型ResNet50進行圖像分類-創(chuàng)新互聯(lián)
標題路徑:http://www.chinadenli.net/article26/djoicg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、響應(yīng)式網(wǎng)站、用戶體驗、關(guān)鍵詞優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站導航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容