圖像識別實戰(五)----模型校驗&預測
前面我們已經完成了數據的處理,模型的建立。萬事俱備,加油!
之前我們將數據劃分爲,訓練集和測試集,已經使用過訓練集進行訓練數據了。
First,來用測試集測試一下模型的準確率吧!
模型訓練
with fluid.dygraph.guard():
accs = []
model_dict, _ = fluid.load_dygraph('MyDNN')
model = MyDNN()
model.load_dict(model_dict) #加載模型參數
model.eval() #評估模式
for batch_id,data in enumerate(test_reader()):#測試集
images=np.array([x[0].reshape(3,100,100) for x in data],np.float32)
labels = np.array([x[1] for x in data]).astype('int64')
labels = labels[:, np.newaxis]
image=fluid.dygraph.to_variable(images)
label=fluid.dygraph.to_variable(labels)
predict=model(image)
acc=fluid.layers.accuracy(predict,label)
accs.append(acc.numpy()[0])
avg_acc = np.mean(accs)
print(avg_acc)
Attention:
一定要記得
model.eval()
將模型切換到評估模式,切換到評估模式,模型不會再訓練,參數不會再改變。
其他的和用動態圖訓練一樣,走一遍
預測
讀取預測圖像,進行預測
def load_image(path):
img = Image.open(path)
img = img.resize((100, 100), Image.ANTIALIAS)
img = np.array(img).astype('float32')
img = img.transpose((2, 0, 1))
img = img/255.0
print(img.shape)
return img
構建預測動態圖過程
with fluid.dygraph.guard():
infer_path = '手勢.JPG'
model=MyDNN()#模型實例化
model_dict,_=fluid.load_dygraph('MyDNN')
model.load_dict(model_dict)#加載模型參數
model.eval()#評估模式
infer_img = load_image(infer_path)
infer_img=np.array(infer_img).astype('float32')
infer_img=infer_img[np.newaxis,:, : ,:]
infer_img = fluid.dygraph.to_variable(infer_img)
result=model(infer_img)
display(Image.open('手勢.JPG'))
print(np.argmax(result.numpy()))
最後給大家貼下我運行的結果把~
。。。。
沒錯我的模型智能性不高,模型沒有訓練好
那麼,如果遇見這種情況又不想破壞模型本身,應該怎麼調優呢?
下面我將介紹幾個簡單調優方法:
-
優化器,學習率調整
opt=fluid.optimizer.SGDOptimizer(learning_rate=0.005, parameter_list=model.parameters())
學習率一般可以選擇0.001,不過可以根據實際情況進行調整(怎樣acc高,怎樣來),
優化器,可以點擊進行學習
-
迭代次數
epochs_num=20
20-50-100,都可以驚醒嘗試。
All in all,所有的代碼都是你編寫的,如果沒有明確提出不可以修改的地方都是可以隨意修改的,如果出錯運行不了大不了再拷貝一份,重新來過。
同時你也可以修改一下,神經網絡的結構,嘗試一下能不能提高acc,降低loss。
隨便改!大膽一點你就是acc最高的。
明確提出不可以修改的地方都是可以隨意修改的,如果出錯運行不了大不了再拷貝一份,重新來過。
同時你也可以修改一下,神經網絡的結構,嘗試一下能不能提高acc,降低loss。
隨便改!大膽一點你就是acc最高的。
ps:如果沒有預測的圖片,可以再訓練集或測試機中隨便找一張就行。自己拍一張,改下像素也是不錯的選擇偶~
如果想了解圖像識別實戰的全過程,請務必點擊博主名字,進入主頁查看全部。
別忘了留下,你的點贊、評論和關注偶~
Name:un_lock