如何構(gòu)建一個(gè) CNN 模型,以從圖像中對(duì)幼苗的種類進(jìn)行分類?
將 CNN 擬合到數(shù)據(jù)上
接下來(lái)是將 CNN 模型擬合到我們的數(shù)據(jù)集上,這樣模型將從訓(xùn)練數(shù)據(jù)集中學(xué)習(xí)并更新權(quán)重。這個(gè)經(jīng)過(guò)訓(xùn)練的 CNN 模型可以進(jìn)一步用于獲得對(duì)我們測(cè)試數(shù)據(jù)集的最終預(yù)測(cè)。我們必須遵循一些先決條件,例如降低學(xué)習(xí)率、找到模型的最佳權(quán)重并保存這些計(jì)算出的權(quán)重,以便我們可以進(jìn)一步使用它們進(jìn)行測(cè)試和獲得預(yù)測(cè)。
根據(jù)我們的常識(shí),我們需要以下內(nèi)容
模型的最佳權(quán)重
降低學(xué)習(xí)率
保存模型的最后權(quán)重
lrr = ReduceLROnPlateau(monitor='val_acc',
patience=3,
verbose=1,
factor=0.4,
min_lr=0.00001)
filepath="drive/DataScience/PlantReco/weights.best_{epoch:02d}-{val_acc:.2f}.hdf5"
checkpoints = ModelCheckpoint(filepath, monitor='val_acc',
verbose=1, save_best_only=True, mode='max')
filepath="drive/DataScience/PlantReco/weights.last_auto4.hdf5"
checkpoints_full = ModelCheckpoint(filepath, monitor='val_acc',
verbose=1, save_best_only=False, mode='max')
callbacks_list = [checkpoints, lrr, checkpoints_full]
#MODEL
# hist = model.fit_generator(datagen.flow(trainX, trainY, batch_size=75),
# epochs=35, validation_data=(testX, testY),
# steps_per_epoch=trainX.shape[0], callbacks=callbacks_list)
# LOADING MODEL
model.load_weights("../input/plantrecomodels/weights.best_17-0.96.hdf5")
dataset = np.load("../input/plantrecomodels/Data.npz")
data = dict(zip(("x_train","x_test","y_train", "y_test"), (dataset[k] for k in dataset)))
x_train = data['x_train']
x_test = data['x_test']
y_train = data['y_train']
y_test = data['y_test']
print(model.evaluate(x_train, y_train)) # Evaluate on train set
print(model.evaluate(x_test, y_test)) # Evaluate on test set
混淆矩陣
混淆矩陣是一種檢查我們的模型如何處理數(shù)據(jù)的方法。這是分析模型錯(cuò)誤的好方法。檢查以下代碼以獲取混淆矩陣
# PREDICTIONS
y_pred = model.predict(x_test)
y_class = np.a(chǎn)rgmax(y_pred, axis = 1)
y_check = np.a(chǎn)rgmax(y_test, axis = 1)
cmatrix = confusion_matrix(y_check, y_class)
print(cmatrix)
獲得預(yù)測(cè)
在最后一部分,我們將獲得對(duì)測(cè)試數(shù)據(jù)集的預(yù)測(cè)。
檢查以下代碼以使用經(jīng)過(guò)訓(xùn)練的模型獲取預(yù)測(cè)
path_to_test = '../input/plant-seedlings-classification/test.png'
pics = glob(path_to_test)
testimages = []
tests = []
count=1
num = len(pics)
for i in pics:
print(str(count)+'/'+str(num),end='r')
tests.a(chǎn)ppend(i.split('/')[-1])
testimages.a(chǎn)ppend(cv2.resize(cv2.imread(i),(scale,scale)))
count = count + 1
testimages = np.a(chǎn)sarray(testimages)
newtestimages = []
sets = []
getEx = True
for i in testimages:
blurr = cv2.GaussianBlur(i,(5,5),0)
hsv = cv2.cvtColor(blurr,cv2.COLOR_BGR2HSV)
lower = (25,40,50)
upper = (75,255,255)
mask = cv2.inRange(hsv,lower,upper)
struc = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(11,11))
mask = cv2.morphologyEx(mask,cv2.MORPH_CLOSE,struc)
boolean = mask>0
masking = np.zeros_like(i,np.uint8)
masking[boolean] = i[boolean]
newtestimages.a(chǎn)ppend(masking)
if getEx:
plt.subplot(2,3,1);plt.imshow(i)
plt.subplot(2,3,2);plt.imshow(blurr)
plt.subplot(2,3,3);plt.imshow(hsv)
plt.subplot(2,3,4);plt.imshow(mask)
plt.subplot(2,3,5);plt.imshow(boolean)
plt.subplot(2,3,6);plt.imshow(masking)
plt.show()
getEx=False
newtestimages = np.a(chǎn)sarray(newtestimages)
# OTHER MASKED IMAGES
for i in range(6):
plt.subplot(2,3,i+1)
plt.imshow(newtestimages[i])
Newtestimages=newtestimages/255
prediction = model.predict(newtestimages)
# PREDICTION TO A CSV FILE
pred = np.a(chǎn)rgmax(prediction,axis=1)
predStr = labels.classes_[pred]
result = {'file':tests,'species':predStr}
result = pd.DataFrame(result)
result.to_csv("Prediction.csv",index=False)、
尾注
所以在本文中,我們?cè)敿?xì)討論了使用 CNN進(jìn)行植物幼苗分類。希望你能從文中學(xué)到一些東西,它會(huì)在未來(lái)對(duì)你有所幫助。

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
7月22-29日立即報(bào)名>> 【線下論壇】第三屆安富利汽車生態(tài)圈峰會(huì)
-
7.30-8.1火熱報(bào)名中>> 全數(shù)會(huì)2025(第六屆)機(jī)器人及智能工廠展
-
7月31日免費(fèi)預(yù)約>> OFweek 2025具身智能機(jī)器人產(chǎn)業(yè)技術(shù)創(chuàng)新應(yīng)用論壇
-
免費(fèi)參會(huì)立即報(bào)名>> 7月30日- 8月1日 2025全數(shù)會(huì)工業(yè)芯片與傳感儀表展
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書》
-
8月5日立即報(bào)名>> 【在線會(huì)議】CAE優(yōu)化設(shè)計(jì):醫(yī)療器械設(shè)計(jì)的應(yīng)用案例與方案解析
推薦專題
- 1 AI產(chǎn)業(yè)的新高度!英偉達(dá)成為全球首家市值破4萬(wàn)億美元的公司
- 2 一文讀懂:到底什么是 “具身智能” ?
- 3 豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
- 4 “支付+”時(shí)代,支付即生態(tài) | 2025中國(guó)跨境支付十大趨勢(shì)
- 5 中國(guó)最具實(shí)力AI公司TOP10
- 6 深圳跑出40億超級(jí)隱形冠軍:賣機(jī)器人年入6.1億,港股上市
- 7 特斯拉Robotaxi上路,馬斯克端上畫了十年的餅
- 8 北京,跑出150億超級(jí)獨(dú)角獸:物流機(jī)器人全球第一,揭示3大機(jī)會(huì)
- 9 “AI六小虎”到了下一個(gè)賽點(diǎn)
- 10 自動(dòng)駕駛中常提的VLA是個(gè)啥?