图像识别实战(五)----模型校验&预测
前面我们已经完成了数据的处理,模型的建立。万事俱备,加油!
之前我们将数据划分为,训练集和测试集,已经使用过训练集进行训练数据了。
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