基于加速度传感器智能穿戴:神经网络以及判断过程

clc
close all
clear all
all_data=xlsread('截取1.xlsx',2,'A1:M20');
class=all_data(:,13);
input=all_data(:,1:12);
[inputn,inputps] = mapminmax( input');
%input_test=input(1:7,:)
%input_test1=input(n(1:7),:)
%[inputn,inputps]=mapminmax(input)
%构造输出矩阵
s = length(class);
output = zeros( s , 2 );
for i = 1 : s 
   output( i , class( i )  ) = 1;
end


%函数接口赋值
NodeNum = 12;  %隐含层节点数
TypeNum = 2;  %输出维数
TF1 = 'tansig';TF2 = 'logsig'; TF3='logsig' %设置传递函数
epochs = 2500;  %训练次数
%创建神经网络
net = newff( minmax(inputn) , [NodeNum TypeNum] , { TF1 TF2 TF3} , 'traingdx' );
%设置训练参数
net.trainparam.show = 100;  %训练显示时间
net.trainparam.epochs = epochs;  %最大训练次数
net.trainparam.goal = 0.001;  %最小均方误差
net.trainparam.min_grad = 1e-20;  %最小梯度
net.trainParam.time = inf;  %最大训练时间
%开始训练
net=train(net,inputn,output');
%读取验证数据
%[t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 c]=textread('C:\Users\yangx_000.PC-201502241516\Desktop\验证数据.txt','%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f',100);
%c= all_data(31:l,27);
text_input=xlsread('截取1.xlsx',2,'A21:M27');
c=text_input(:,13);
test_input=text_input(:,1:12)';
%训练数据归一化
test_inputn=mapminmax('apply',test_input,inputps);
%仿真
Y = sim( net , test_inputn ) 
[s1,s2]=size(Y);
index=0;
for i=1:s2
    [m,p]=max(Y(:,i));
    if (p==c(i))
        sprintf('正确!')
        index=index+1;
    else
        sprintf('不对!')
    end
end

sprintf('正确率为:%3.3f%%',index*100/s2)


1,先构造输入数据,与输出数据的格式

2,设置隐含层节点数,输出维数,设置传递函数,训练次数,有这些之后,就可以创建一个网络了,然后设置网络的训练参数:训练显示时间,最大训练慈溪浒,最小均方误

差,最小梯度,最大训练时间参数,,有了这些,就可以网络,输入数据,输出数据,这三个,就可以进行训练。

3,对测试数据进行归一化处理(变成【-1,1】),然后对测试数据进行仿真,对仿真的数据进行判断,统计正确率。

4,提取出权值和阈值。


经过我们观察,基本12个数据能完全包含一次跺脚过程,而且一般人每次跺脚的加速度峰值在【-800,1100】

使用过程中,我们时刻进行采集数据,每12个数据为一组,让这十二个数据的每一个数据,分别乘以第一个权值并相加,减去阈值,得到八个值,将这8个值经过激活函数,作为下一层的输入,分别乘以第二个权值数组,减去阈值,得到两个值,经过激活函数,得到两个值,如果第一个值大于第二个值,就表明数据就是我们想要的,那就可以判断这就是三次跺脚,发送ok给安卓程序。

uchar isStep()
{
    uchar i;
    uchar j;
    for(i=0;i<8;i++)//第一层
{
 for(j=0;j<12;j++)
 {
   n1[i]+=IW[i][j]*data_Z[j];
 }
 n1[i]+=B1[i];
}
    for(i=0;i<8;i++)
{
 n1[i]=2/(1+exp(-2*n1[i]))-1;
}
//-------------------------------------------------
    for(i=0;i<8;i++)//第二层
{
 n2[0]+=LW[0][i]*n1[i];
}
n2[0]+=B2[0];
for(i=0;i<8;i++)
{
 n2[1]+=LW[1][i]*n1[i];
}
n2[1]+=B2[1];
n2[0]=1/(1+exp(-n2[0]));
    n2[1]=1/(1+exp(-n2[1]));


  if(n2[0]>n2[1])
  return 1;
  else
  return 0;
}


http://blog.csdn.net/gongxq0124/article/details/7681000

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值