目标
背影
BP神经网络的原理
BP神经网络的定义
BP神经网络的基本结构
BP神经网络的神经元
BP神经网络的激活函数,
BP神经网络的传递函数
数据
神经网络参数
基于BP神经网络手部动作识别的MATLAB代码
效果图
结果分析
展望
背影
随着人工智能的发展,智能穿戴设备发展越来越快,需要实时识别人体的动作,本文用BP神经网络识别人体手部动作
BP神经网络的原理
BP神经网络的定义
人工神经网络无需事先确定输入输出之间映射关系的数学方程,仅通过自身的训练,学习某种规则,在给定输入值时得到最接近期望输出值的结果。作为一种智能信息处理系统,人工神经网络实现其功能的核心是算法。BP神经网络是一种按误差反向传播(简称误差反传)训练的多层前馈网络,其算法称为BP算法,它的基本思想是梯度下降法,利用梯度搜索技术,以期使网络的实际输出值和期望输出值的误差均方差为最小。
BP神经网络的基本结构
基本BP算法包括信号的前向传播和误差的反向传播两个过程。即计算误差输出时按从输入到输出的方向进行,而调整权值和阈值则从输出到输入的方向进行。正向传播时,输入信号通过隐含层作用于输出节点,经过非线性变换,产生输出信号,若实际输出与期望输出不相符,则转入误差的反向传播过程。误差反传是将输出误差通过隐含层向输入层逐层反传,并将误差分摊给各层所有单元,以从各层获得的误差信号作为调整各单元权值的依据。通过调整输入节点与隐层节点的联接强度和隐层节点与输出节点的联接强度以及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数(权值和阈值),训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息。
bp神经网络的神经元
神经网络是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。
神经网络由多个神经元构成,下图就是单个神经元的图1所示:
。。。。。。。。。。。。。。。。。。。。。。。。图1 ,神经元模型
bp神经网络激活函数及公式
![在这里插入图片描述](https://img-blog.csdnimg.cn/29edde342c3945939ad5945145ca8509.png
BP神经网络传递函数及公式
图2是Sigmoid函数和双极S函数的图像,其中Sigmoid函数的图像区域是0到1,双极S函数的区间是正负1,归一化的时候要和传递函数的区域相对应,不然,可能效果不好
神经网络就是将许多个单一的神经元联结在一起,这样,一个神经元的输出就可以是另一个神经元的输入。
例如,下图就是一个简单的神经网络:
基于BP神经网络的衣服识别
数据
通过采集设备直接采集,采集两个人的,每个人采集6个动作,每个动作做40次
神经网络参数
三层神经网络,传递函数logsig , tansig,训练函数自适应动量因子梯度下降函数,学习率0.1,学习目标0.0001,最大迭代次数100
MATLAB编程代码
clc;clear;close all;warning off ;rng(‘default’);format compact
tic %计时开始
%%
%读取数据
load data
% 特征提取–不用特征的提取的话就在这几句前面加上%号注释
max_value=max(input1’)‘;%最大值
mean_value=mean(input1’)‘;%均值
std_value=std(input1’)‘;%方差
input1=[max_value mean_value std_value];
%% 随机选择测试集与训练集
% 标签转换
output=zeros(size(label,1),max(label));
for i=1:size(label,1)
output(i,label(i))=1;
end
n=randperm(size(input1,1));
m=floor(size(input1,1)*0.75);
P_train=input1(n(1:m)😅’;
T_train=output(n(1:m)😅‘;
P_test=input1(n(m+1:end)😅’;
T_test=output(n(m+1:end)😅';
%% 建立网络
s1=5;%隐含层节点
net_bp=newff(P_train,T_train,s1);
% 设置训练参数
net_bp.trainParam.epochs = 100;
net_bp.trainParam.goal = 0.0001;
net_bp.trainParam.lr = 0.01;
net_bp.trainParam.showwindow = 1;
%% 训练并测试BP网络
net_bp = train(net_bp,P_train,T_train);%训练
% 测试
tn_bp_sim = sim(net_bp,P_test);%测试
[I, predictedLabels]=max(tn_bp_sim’,[],2);
[I1 ,testLabels]=max(T_test’,[],2);
test_accuracy=sum(testLabels==predictedLabels)/length(predictedLabels)
figure;hold on;xlabel(‘测试集样本数’);ylabel(‘分类标签’)
plot(predictedLabels,‘')
stem(testLabels)
legend(‘预测标签’,‘真实标签’)
title(‘BP神经网络’)
%% 评估分类器
%生成一个混淆矩阵表明分类效果
confMat=confusionmat(testLabels, predictedLabels);
% 分别计算每一个动作的识别概率
disp([‘1,空(无人)的分类正确率为’,num2str(100confMat(1,1)/sum(confMat(1,:))),’%‘])
disp([‘2,左手扶墙的分类正确率为’,num2str(100confMat(2,2)/sum(confMat(2,:))),‘%’])
disp([‘3,右手扶墙的分类正确率为’,num2str(100confMat(3,3)/sum(confMat(3,:))),’%‘])
disp([‘4,站立的分类正确率为’,num2str(100confMat(4,4)/sum(confMat(4,:))),‘%’])
disp([‘5,坐的分类正确率为’,num2str(100confMat(5,5)/sum(confMat(5,:))),’%‘])
disp([‘6,走路的分类正确率为’,num2str(100confMat(6,6)/sum(confMat(6,:))),‘%’])
disp([‘7,右手放下的分类正确率为’,num2str(100confMat(7,7)/sum(confMat(7,:))),’%‘])
disp([‘8,左手放下的分类正确率为’,num2str(100*confMat(8,8)/sum(confMat(8,:))),’%'])
%%
act1=testLabels;
det1=predictedLabels;
figure
[mat,kappa]=confusion_matrix1(act1,det1);
set(gca,‘XTick’,1:8,…
‘XTickLabel’,{‘空’,‘左手扶墙’,‘右手扶墙’,‘站立’,‘坐’,‘走路’,‘右手放下’,‘左手放下’},… %# and tick labels
‘YTick’,1:8,… %同上
‘YTickLabel’,{‘空’,‘左手扶墙’,‘右手扶墙’,‘站立’,‘坐’,‘走路’,‘右手放下’,‘左手放下’},…
‘TickLength’,[0 0]);
title(‘BP预测标签与真实标签的混淆矩阵’);
disp([‘BP所需时间为’,num2str(toc)])%计时结束
效果图
结果分析
从效果图上看,BP神经网络能很好的实现对手部动作的识别,BP神经网络是一种成熟的神经,相对于其他神经网络,拥有很多的训练函数,传递函数,可以调节的参数非常多,对各种问题都可以达到一个比较理想的效果,关键看如何调试参数,选择训练传递函数,有疑问或者其他应用方面,欢迎大家扫描下面的二维码
展望
针对神经网络供工具箱,可以自己写函数的代入并原本的工具箱函数,可以有很多种改进方法