手势识别(基于Paddle飞桨框架)

训练集

训练集是由百度AI Studio提供的经典手势图片,共有两千多张。

https://aistudio.baidu.com/aistudio/datasetdetail/23668

解压完后,分别有0-9的各个手势。
在这里插入图片描述

框架

这次深度学习使用的框架是百度推出的paddlepaddle飞桨。

paddle的使用手册 https://www.paddlepaddle.org.cn/documentation/docs/zh/beginners_guide/index_cn.html

深度学习

  • 建立模型(本次使用DNN模型)
  • 选择常用损失函数,平方误差,交叉熵…
  • 参数学习

DNN模型

在这里插入图片描述
本次深度学习共使用了4层隐藏层,学习率设置为0.005,迭代次数选择了500次。运行环境是CPU: 2 Cores. RAM: 8GB.的免费版本,训练时长59分钟。

引用的包

import os
import time
import random
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import paddle
import paddle.fluid as fluid
import paddle.fluid.layers as layers
from multiprocessing import cpu_count
from paddle.fluid.dygraph import Pool2D,Conv2D
from paddle.fluid.dygraph import Linear

定义DNN网络

隐藏层使用的激活函数是ReLu
输出层使用的激活函数是Softmax
在这里插入图片描述

#定义DNN网络
class MyDNN(fluid.dygraph.Layer):
    def __init__(self):
        super(MyDNN,self).__init__()
        self.hidden1 = Linear(100,100,act='relu')
        self.hidden2 = Linear(100,100,act='relu')
        self.hidden3 = Linear(100,100,act='relu')
        self.hidden4 = Linear(100,100,act='relu')
        self.hidden5 = Linear(3*100*100,10,act='softmax')
    def forward(self,input):
        x=self.hidden1(input)
        x=self.hidden2(x)
        x=self.hidden3(x)
        x=self.hidden4(x)
        x=fluid.layers.reshape(x,shape=[-1,3*100*100])
        y=self.hidden5(x)
        return y

使用动态图进行训练


#用动态图进行训练
with fluid.dygraph.guard():
    model=MyDNN() #模型实例化
    model.train() #训练模式
    opt=fluid.optimizer.SGDOptimizer(learning_rate=0.005, parameter_list=model.parameters())#优化器选用SGD随机梯度下降,学习率为0.001.

    epochs_num=500 #迭代次数
    
    for pass_num in range(epochs_num):
        
        for batch_id,data in enumerate(train_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]
            # print(images.shape)
            image=fluid.dygraph.to_variable(images)
            label=fluid.dygraph.to_variable(labels)
            predict=model(image)#预测
            # print(predict)
            loss=fluid.layers.cross_entropy(predict,label)
            avg_loss=fluid.layers.mean(loss)#获取loss值
            
            acc=fluid.layers.accuracy(predict,label)#计算精度
            
            if batch_id!=0 and batch_id%50==0:
                print("train_pass:{},batch_id:{},train_loss:{},train_acc:{}".format(pass_num,batch_id,avg_loss.numpy(),acc.numpy()))
            
            avg_loss.backward()
            opt.minimize(avg_loss)
            model.clear_gradients()
            
    fluid.save_dygraph(model.state_dict(),'MyDNN')#保存模型
 

迭代效果
在这里插入图片描述

测试集结果

使用上述的所有参数,最后测试集的平均acc为0.8715278。
百度的小哥单纯使用DNN+dropout防止过拟合,测试集可以达到0.95。
看来我还是要多调调参啊。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值