图像识别实战(五)----模型校验&预测

前面我们已经完成了数据的处理,模型的建立。万事俱备,加油!

之前我们将数据划分为,训练集和测试集,已经使用过训练集进行训练数据了。

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()))

最后给大家贴下我运行的结果把~

图像识别 jetson_图像识别 jetson

。。。。

没错我的模型智能性不高,模型没有训练好

那么,如果遇见这种情况又不想破坏模型本身,应该怎么调优呢?

下面我将介绍几个简单调优方法:

  • 优化器,学习率调整
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