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