DEMO

Posted hkkeryu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DEMO相关的知识,希望对你有一定的参考价值。


clc; clear; close all; load ..\CFCC_mat\all_data_label.mat % load all_data_label_02.mat %matlab神经网络工具箱权值和阈值每次都是随机初始化的,加上"setdemorandstream(pi)"即可固定随机种子,使其训练结果不变 setdemorandstream(pi); train_y=train_y‘; test_y=test_y‘; P=size(test_x); w=size(train_x); %% category=26;%26种类别 M=26*10;%测试用样本数 bp_number=80; %隐层神经元个数 % bp_number =round( log( size(train_x,2) )/ log(2) ); input_label_test=zeros(1,M); % output_label=zeros(1,M); %% for j=1:P(1) %P(1)=90 input_label_test(j)= find(test_y(:,j)) ; %正确,返回T1中第j列不为0元素的行数 end %% %特征值归一化; [input,minI,maxI] = premnmx( train_x‘) ;%input归一化矩阵,minI,每行最小值,maxI,每行最大值 %for i=10:300 %创建神经网络,隐藏层与输出层对应的传输转移函数分别为"tansig","logsig"%[24,9] net=newff(minmax(input),[bp_number,category],{‘tansig‘ ‘logsig‘} ,‘traingdx‘); % ‘traingdx‘ 自适应调整学习速率附加动量因子梯度下降反向传播算法训练函数 net.trainParam.lr=0.001;%学习率 net.trainParam.show=5000;%显示中间结果的周期 net.trainParam.epochs=20000;%最大迭代次数 net.trainParam.goal=0.0001; %神经网络训练的目标误差 %%开始训练 net=train(net,input,train_y); %T9x900 save trainNet net minI %% %train trainInput = tramnmx ( train_x‘ , minI, maxI ) ; TT=sim(net,trainInput);%返回测试样本的输出预测值 error2 = train_y - round(TT); RX=0; for s=1:w(1) if(sum(error2(:,s))==0) RX = RX + 1; end end Trainidentifyrate = RX/(w(1)) %% % 测试数据归一化 test testInput = tramnmx ( test_x‘ , minI, maxI ) ; RS=sim(net,testInput);%test_input 400xM,每一列为一个样本 RS9x90,9类一共M个样本 % U=round(RS); [~,output_label_test] = max(RS,[],1); %返回每列最大值所处行数 %% %视图化 % test_labels =input_label_test‘; % predict_label=output_label_test‘; figure; hold on; plot(input_label_test‘,‘o‘); %test_labels plot(output_label_test‘,‘r+‘);%predict_label xlabel(‘测试集样本‘,‘FontSize‘,12); ylabel(‘类别标签‘,‘FontSize‘,12); legend(‘实际测试集分类‘,‘预测测试集分类‘); title(‘测试集的实际分类和预测分类图‘,‘FontSize‘,12); %设置x轴范围和刻度 set(gca,‘XLim‘,[0 260]);%X轴的数据显示范围 set(gca,‘XTick‘,[0:10:260]);%设置要显示坐标刻度 % set(gca,‘XTickLabel‘,[0:1:10]);%给坐标加标签 %设置y轴范围和刻度 set(gca,‘YLim‘,[1 26]);%X轴的数据显示范围 set(gca,‘YTick‘,[0:1:26]);%设置要显示坐标刻度 % set(gca,‘YTickLabel‘,[95:1:101]);%给坐标加标签 grid on; %% III 计算准确率 c=input_label_test-output_label_test; number=0; error_label_number =1; for i=1:1:M if(c(1,i)==0) number = number+1; end % if (abs(c(1,i))==1 ) %不等于 % error_label(error_label_number,1)= i; %误差为1错误标签位置 % error_label_number = error_label_number+1; % end % if (abs(c(1,i))~=0 ) %不等于 error_location(error_label_number,1)= i; %误差为1错误标签位置 error_label_number = error_label_number+1; end end accuracy = number/M save error_label.mat error_location %% data =[input_label_test‘,output_label_test‘]; data =transform(data); figure; hold on; plot(data(:,1)‘,‘o‘); %test_labels plot(data(:,2)‘,‘r+‘);%predict_label xlabel(‘测试集样本‘,‘FontSize‘,12); ylabel(‘类别标签‘,‘FontSize‘,12); legend(‘实际测试集分类‘,‘预测测试集分类‘); title(‘测试集的实际分类和预测分类图‘,‘FontSize‘,12); %设置x轴范围和刻度 set(gca,‘XLim‘,[0 260]);%X轴的数据显示范围 set(gca,‘XTick‘,[0:10:260]);%设置要显示坐标刻度 % set(gca,‘XTickLabel‘,[0:1:10]);%给坐标加标签 %设置y轴范围和刻度 set(gca,‘YLim‘,[1 26]);%X轴的数据显示范围 set(gca,‘YTick‘,[0:1:26]);%设置要显示坐标刻度 % set(gca,‘YTickLabel‘,[95:1:101]);%给坐标加标签 grid on; %% data =[input_label_test‘,output_label_test‘]; data =data(:,1)-data(:,2); AA=zeros(26,1) for i=1:26 number=0; for j=1:10 if data( (i-1)*10+j ,1 )==0 number=number+1; end end AA(i,1)=number; end %% confusion_matrix1( output_label_test,input_label_test)

  FUNCTION  

confusion_matrix1 混淆矩阵画图
function confusion_matrix1(act1, det1)
%act1为真实的标签,det1为预测标签
%输入的是行向量
%https://blog.csdn.net/xuyingjie125/article/details/78417760
[mat, order] = confusionmat(act1, det1);
%confusionmat用来构建混淆矩阵,mat返回混淆矩阵,order返回每个变量所在的类
%mat(i,j)表示训练集中i类在测试集中被分到j类的个数
k = max(order);   %k为分类的个数

imagesc(mat); %imagesc函数将矩阵mat的元素数值按大小转化为不同颜色,并在坐标轴对应位置以这种颜色染色
colormap(flipud(gray)); %转换成灰度图
%colormap函数是用来设定和获取当前色图的函数
%flipud是矩阵倒转命令,gray是matlab内置矩阵
%gray()会返回M×3的矩阵
title(‘混淆矩阵‘);
textStrings = num2str(mat(:),‘%d‘);
%num2str(x,precision)把数组x转换成字符串形式表示,precision为精度
textStrings = strtrim(cellstr(textStrings));
%cellstr是将字符数组转换成cell类型
%裁切字符串的开头和尾部的空格,制表,回车符

%meshgrid是MATLAB中用于生成网格采样点的函数
[x,y] = meshgrid(1:k);
hStrings = text(x(:),y(:),textStrings(:),‘HorizontalAlignment‘,‘center‘);
%text函数表示对文字string定位于用坐标轴指定的位置,且对指定的属性进行设置
%HorizontalAlignment表示文字水平方向的对齐方式,center表示文本外框中间对齐
midValue = mean(get(gca,‘CLim‘)); 
%get(gca,‘CLim‘)获取当前的坐标轴句柄,并设置它的CLim(ColorLimit)值,用来使不同的图使用相同的色标
%mean函数返回均值,使得midValue获得图色标的均值0.5000
textColors = repmat(mat(:) > midValue,1,3);
%将矩阵[mat(:)>midValue]复制1×3块的矢量(颜色值必须为包含3个元素的数值矢量)
%把矩阵[mat(:)>midValue]作为矩阵textColors的元素
%B=repmat(A,M,N)这是一个处理大矩阵且内容有重复时使用,其功能是以A的内容堆叠在(M×N)的矩阵B中,
%B矩阵的大小由M×N及A矩阵的内容决定,
%如果A是一个3×4×5的矩阵,则矩阵B变为6×12×5

set(hStrings,{‘Color‘},num2cell(textColors,2));
%n=1表示把每列的所有行转换为cell,n=2表示把每行的所有列转换为cell,将结构阵列转换成异质阵列
%然后set去重后放在hStrings

%根据自己的分类要求更改类别标签

set(gca,‘XTick‘,1:26,‘XTickLabel‘,{‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,‘10‘,‘11‘,‘12‘,‘13‘,‘14‘,‘15‘,‘16‘,‘17‘,‘18‘,‘19‘,‘20‘,‘21‘,‘22‘,‘23‘,‘24‘,‘25‘,‘26‘},‘YTick‘,1:26,‘YTickLabel‘,{‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,‘10‘,‘11‘,‘12‘,‘13‘,‘14‘,‘15‘,‘16‘,‘17‘,‘18‘,‘19‘,‘20‘,‘21‘,‘22‘,‘23‘,‘24‘,‘25‘,‘26‘});
% --------------------- 
% 浣滆?锛歴undreamoon 
% 鏉ユ簮锛欳SDN 
% 鍘熸枃锛歨ttps://blog.csdn.net/sundreamoon/article/details/79958207 
% 鐗堟潈澹版槑锛氭湰鏂囦负鍗氫富鍘熷垱鏂囩珷锛岃浆杞借闄勪笂鍗氭枃閾炬帴锛?

  相关系数 code

%% 相关系数
%% V. 性能评价
%%
% 1. 相对误差error
input_test_label = actual_label;
error = abs(predict_label - input_test_label)./input_test_label;
[N,~]=size(input_test_label);
%%
% 2. 决定系数R^2
R2 = (N * sum(predict_label .* input_test_label) - sum(predict_label) * sum(input_test_label))^2 / ((N * sum((predict_label).^2) - (sum(predict_label))^2) * (N * sum((input_test_label).^2) - (sum(input_test_label))^2)); 

%%
% 3. 结果对比
result = [input_test_label‘ predict_label‘ error‘]

%% VI. 绘图
figure
plot(1:N,input_test_label,‘b:*‘,1:N,predict_label,‘r-o‘)
legend(‘真实值‘,‘预测值‘)
xlabel(‘预测样本‘)
ylabel(‘标签值‘)
string = {‘测试集预测结果对比‘;[‘R^2=‘ num2str(R2)]};
title(string)

  SVM code

%% SVM神经网络的数据分类预测----意大利葡萄酒种类识别
% 
% 
% <html>
% <table border="0" width="600px" id="table1">	<tr>		<td><b><font size="2">该案例作者申明:</font></b></td>	</tr>	<tr>		<td><span class="comment"><font size="2">1:本人长期驻扎在此<a target="_blank" href="http://www.ilovematlab.cn/forum-158-1.html"><font color="#0000FF">板块</font></a>里,对<a target="_blank" href="http://www.ilovematlab.cn/thread-48362-1-1.html"><font color="#0000FF">该案例</font></a>提问,做到有问必答。</font></span></td></tr><tr>	<td><span class="comment"><font size="2">2:此案例有配套的教学视频,配套的完整可运行Matlab程序。</font></span></td>	</tr>	<tr>		<td><span class="comment"><font size="2">		3:以下内容为该案例的部分内容(约占该案例完整内容的1/10)。</font></span></td>	</tr>		<tr>		<td><span class="comment"><font size="2">		4:此案例为原创案例,转载请注明出处(<a target="_blank" href="http://www.ilovematlab.cn/">Matlab中文论坛</a>,<a target="_blank" href="http://www.ilovematlab.cn/forum-158-1.html">《Matlab神经网络30个案例分析》</a>)。</font></span></td>	</tr>		<tr>		<td><span class="comment"><font size="2">		5:若此案例碰巧与您的研究有关联,我们欢迎您提意见,要求等,我们考虑后可以加在案例里。</font></span></td>	</tr>		<tr>		<td><span class="comment"><font size="2">		6:您看到的以下内容为初稿,书籍的实际内容可能有少许出入,以书籍实际发行内容为准。</font></span></td>	</tr><tr>		<td><span class="comment"><font size="2">		7:此书其他常见问题、预定方式等,<a target="_blank" href="http://www.ilovematlab.cn/thread-47939-1-1.html">请点击这里</a>。</font></span></td>	</tr></table>
% </html>
% 


%% 清空环境变量
close all;
clear;
clc;
format compact;
%% 数据提取

% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量
load chapter12_wine.mat;

% 画出测试数据的box可视化图
figure;
boxplot(wine,‘orientation‘,‘horizontal‘,‘labels‘,categories);
title(‘wine数据的box可视化图‘,‘FontSize‘,12);
xlabel(‘属性值‘,‘FontSize‘,12);
grid on;

% 画出测试数据的分维可视化图
figure
subplot(3,5,1);
hold on
for run = 1:178
    plot(run,wine_labels(run),‘*‘);
end
xlabel(‘样本‘,‘FontSize‘,10);
ylabel(‘类别标签‘,‘FontSize‘,10);
title(‘class‘,‘FontSize‘,10);
for run = 2:14
    subplot(3,5,run);
    hold on;
    str = [‘attrib ‘,num2str(run-1)];
    for i = 1:178
        plot(i,wine(i,run-1),‘*‘);
    end
    xlabel(‘样本‘,‘FontSize‘,10);
    ylabel(‘属性值‘,‘FontSize‘,10);
    title(str,‘FontSize‘,10);
end

% 选定训练集和测试集

% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集
train_wine = [wine(1:30,:);wine(60:95,:);wine(131:153,:)];
% 相应的训练集的标签也要分离出来
train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];
% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集
test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];
% 相应的测试集的标签也要分离出来
test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];

%% 数据预处理
% 数据预处理,将训练集和测试集归一化到[0,1]区间

[mtrain,ntrain] = size(train_wine);
[mtest,ntest] = size(test_wine);

dataset = [train_wine;test_wine];
% mapminmax为MATLAB自带的归一化函数
[dataset_scale,ps] = mapminmax(dataset‘,0,1);
dataset_scale = dataset_scale‘;

train_wine = dataset_scale(1:mtrain,:);
test_wine = dataset_scale( (mtrain+1):(mtrain+mtest),: );
%% SVM网络训练
model = svmtrain(train_wine_labels, train_wine, ‘-c 2 -g 1‘);

%% SVM网络预测
[predict_label, accuracy , pred] = svmpredict(test_wine_labels, test_wine, model);

%% 结果分析

% 测试集的实际分类和预测分类图
% 通过图可以看出只有一个测试样本是被错分的
figure;
hold on;
plot(test_wine_labels,‘o‘);
plot(predict_label,‘r*‘);
xlabel(‘测试集样本‘,‘FontSize‘,12);
ylabel(‘类别标签‘,‘FontSize‘,12);
legend(‘实际测试集分类‘,‘预测测试集分类‘);
title(‘测试集的实际分类和预测分类图‘,‘FontSize‘,12);
grid on;

%%
% 
% <html>
% <table align="center" >	<tr>		<td align="center"><font size="2">版权所有:</font><a
% href="http://www.ilovematlab.cn/">Matlab中文论坛</a>   <script
% src="http://s3.cnzz.com/stat.php?id=971931&web_id=971931&show=pic" language="javascript" ></script> </td>	</tr></table>
% </html>
% 

   III  CNN

main

%%%  matlab实现LeNet-5
%%%  作者:xd.wp
%%%  时间:2016.10.22  14:29
%% 程序说明
%          1、池化(pooling)采用平均2*2
%          2、网络结点数说明:
%                           输入层:28*28
%                           第一层:24*24(卷积)*20
%                           tanh
%                           第二层:12*12(pooling)*20
%                           第三层:100(全连接)
%                           第四层:10(softmax)
%          3、网络训练部分采用800个样本,检验部分采用100个样本
clear all;clc;
%% 网络初始化
layer_c1_num=20;
layer_s1_num=20;
layer_f1_num=100;
layer_output_num=26;
%权值调整步进
yita=0.01;
%bias初始化
bias_c1=(2*rand(1,20)-ones(1,20))/sqrt(20);
bias_f1=(2*rand(1,100)-ones(1,100))/sqrt(20);
%卷积核初始化
[kernel_c1,kernel_f1]=init_kernel(layer_c1_num,layer_f1_num);
%pooling核初始化
pooling_a=ones(2,2)/4;
%全连接层的权值
weight_f1=(2*rand(20,100)-ones(20,100))/sqrt(20);
weight_output=(2*rand(100,layer_output_num)-ones(100,layer_output_num))/sqrt(100);
disp(‘网络初始化完成......‘);
%% 开始网络训练
disp(‘开始网络训练......‘);
for iter=1:10
for n=1:100
    for m=1:26
        %读取样本
%         train_data=imread(strcat(num2str(m),‘_‘,num2str(n),‘.bmp‘));
        
        path = [‘C:\Users\Administrator\Desktop\流程\时域频域图\figure_2\figure_28_28\‘,[num2str(m),‘_‘,num2str(n)],‘.bmp‘];%如0_1~0_10
        train_data=imread(path);
        train_data=double(train_data);
        % 去均值
%       train_data=wipe_off_average(train_data);
        %前向传递,进入卷积层1
        for k=1:layer_c1_num
            state_c1(:,:,k)=convolution(train_data,kernel_c1(:,:,k));
            %进入激励函数
            state_c1(:,:,k)=tanh(state_c1(:,:,k)+bias_c1(1,k));
            %进入pooling1
            state_s1(:,:,k)=pooling(state_c1(:,:,k),pooling_a);
        end
        %进入f1层
        [state_f1_pre,state_f1_temp]=convolution_f1(state_s1,kernel_f1,weight_f1);
        %进入激励函数
        for nn=1:layer_f1_num
            state_f1(1,nn)=tanh(state_f1_pre(:,:,nn)+bias_f1(1,nn));
        end
        %进入softmax层
        for nn=1:layer_output_num
            output(1,nn)=exp(state_f1*weight_output(:,nn))/sum(exp(state_f1*weight_output));
        end
       %% 误差计算部分
        Error_cost=-output(1,m);
%         if (Error_cost<-0.98)
%             break;
%         end
        %% 参数调整部分
        [kernel_c1,kernel_f1,weight_f1,weight_output,bias_c1,bias_f1]=CNN_upweight(yita,Error_cost,m-1,train_data,...
                                                                                                state_c1,state_s1,...
                                                                                                state_f1,state_f1_temp,...
                                                                                                output,...
                                                                                                kernel_c1,kernel_f1,weight_f1,weight_output,bias_c1,bias_f1);
    end    
end
end
disp(‘网络训练完成,开始检验......‘);
%% 测试阶段
number = 1;  
count=0;
for n=101:110
    for m=1:26
        %读取样本
%         train_data=imread(strcat(num2str(m),‘_‘,num2str(n),‘.bmp‘));
        path = [‘C:\Users\Administrator\Desktop\流程\时域频域图\figure_2\figure_28_28\‘,[num2str(m),‘_‘,num2str(n)],‘.bmp‘];%如0_1~0_10
        %读取样本
        train_data=imread(path);
        train_data=double(train_data);
        % 去均值
%       train_data=wipe_off_average(train_data);
        %前向传递,进入卷积层1
        for k=1:layer_c1_num
            state_c1(:,:,k)=convolution(train_data,kernel_c1(:,:,k));
            %进入激励函数
            state_c1(:,:,k)=tanh(state_c1(:,:,k)+bias_c1(1,k));
            %进入pooling1
            state_s1(:,:,k)=pooling(state_c1(:,:,k),pooling_a);
        end
        %进入f1层
        [state_f1_pre,state_f1_temp]=convolution_f1(state_s1,kernel_f1,weight_f1);
        %进入激励函数
        for nn=1:layer_f1_num
            state_f1(1,nn)=tanh(state_f1_pre(:,:,nn)+bias_f1(1,nn));
        end
        %进入softmax层
        for nn=1:layer_output_num
            output(1,nn)=exp(state_f1*weight_output(:,nn))/sum(exp(state_f1*weight_output));
        end
        [p,classify]=max(output);
        if (classify==m+1)
            count=count+1;
        end
        fprintf(‘真实类别为%d  预测类别为%d  概率值为%d \n‘,m,classify,p);
        infor(number,1) = m;
        infor(number,2) = classify;
        infor(number,3) = p;
        number = number+1;

        

    end
end

%% 准确率计算
 number = 1;
A = size(infor);
for i=1:A(1)
    if infor(i,1)- infor(i,2)==0
    
    number =number+1;
    end
    
end


accuracy = number/A(1)

save data_1.mat

 FUNCTION  convolution

function [state]=convolution(data,kernel)

%实现卷积层操作?
[data_row,data_col]=size(data);
[kernel_row,kernel_col]=size(kernel);
for m=1:data_col-kernel_col+1
    for n=1:data_row-kernel_row+1
        state(m,n)=sum(sum(data(m:m+kernel_row-1,n:n+kernel_col-1).*kernel));
    end
end

  FUNCTION   convolution_f1

function [state_f1,state_f1_temp]=convolution_f1(state_s1,kernel_f1,weight_f1)
%% 完成卷积层2操作
layer_f1_num=size(weight_f1,2);
layer_s1_num=size(weight_f1,1);
%%
for n=1:layer_f1_num
    count=0;
    for m=1:layer_s1_num
        temp=state_s1(:,:,m)*weight_f1(m,n);
        count=count+temp;
    end
    state_f1_temp(:,:,n)=count;
    state_f1(:,:,n)=convolution(state_f1_temp(:,:,n),kernel_f1(:,:,n));
end
end

 FUNCTION CNN_upweight

function [kernel_c1,kernel_f1,weight_f1,weight_output,bias_c1,bias_f1]=CNN_upweight(yita,Error_cost,classify,train_data,state_c1,state_s1,state_f1,state_f1_temp,...
                                                                                                output,kernel_c1,kernel_f1,weight_f1,weight_output,bias_c1,bias_f1)
%%%     完成参数更新,权值和卷积核
%% 结点数目
layer_c1_num=size(state_c1,3);
layer_s1_num=size(state_s1,3);
layer_f1_num=size(state_f1,2);
layer_output_num=size(output,2);
 
[c1_row,c1_col,~]=size(state_c1);
[s1_row,s1_col,~]=size(state_s1);
 
[kernel_c1_row,kernel_c1_col]=size(kernel_c1(:,:,1));
[kernel_f1_row,kernel_f1_col]=size(kernel_f1(:,:,1));
%% 保存网络权值
kernel_c1_temp=kernel_c1;
kernel_f1_temp=kernel_f1;
 
weight_f1_temp=weight_f1;
weight_output_temp=weight_output;
%% Error计算
label=zeros(1,layer_output_num);
label(1,classify+1)=1;
delta_layer_output=output-label;
%% 更新weight_output
for n=1:layer_output_num
    delta_weight_output_temp(:,n)=delta_layer_output(1,n)*state_f1‘;
end
weight_output_temp=weight_output_temp-yita*delta_weight_output_temp;
 
%% 更新bias_f1以及kernel_f1
for n=1:layer_f1_num
    count=0;
    for m=1:layer_output_num
        count=count+delta_layer_output(1,m)*weight_output(n,m);
    end
    %bias_f1
    delta_layer_f1(1,n)=count*(1-tanh(state_f1(1,n)).^2);
    delta_bias_f1(1,n)=delta_layer_f1(1,n);
    %kernel_f1
    delta_kernel_f1_temp(:,:,n)=delta_layer_f1(1,n)*state_f1_temp(:,:,n);
end
bias_f1=bias_f1-yita*delta_bias_f1;
kernel_f1_temp=kernel_f1_temp-yita*delta_kernel_f1_temp;
%% 更新weight_f1
for n=1:layer_f1_num
    delta_layer_f1_temp(:,:,n)=delta_layer_f1(1,n)*kernel_f1(:,:,n);
end
for n=1:layer_s1_num
    for m=1:layer_f1_num
        delta_weight_f1_temp(n,m)=sum(sum(delta_layer_f1_temp(:,:,m).*state_s1(:,:,n)));
    end
end
weight_f1_temp=weight_f1_temp-yita*delta_weight_f1_temp;
 
%% 更新 bias_c1
for n=1:layer_s1_num
    count=0;
    for m=1:layer_f1_num
        count=count+delta_layer_f1_temp(:,:,m)*weight_f1(n,m);   
    end
    delta_layer_s1(:,:,n)=count;
    delta_layer_c1(:,:,n)=kron(delta_layer_s1(:,:,n),ones(2,2)/4).*(1-tanh(state_c1(:,:,n)).^2);
    delta_bias_c1(1,n)=sum(sum(delta_layer_c1(:,:,n)));
end
bias_c1=bias_c1-yita*delta_bias_c1;
%% 更新 kernel_c1
for n=1:layer_c1_num
    delta_kernel_c1_temp(:,:,n)=rot90(conv2(train_data,rot90(delta_layer_c1(:,:,n),2),‘valid‘),2);
end
kernel_c1_temp=kernel_c1_temp-yita*delta_kernel_c1_temp;
 
%% 网络权值更新
kernel_c1=kernel_c1_temp;
kernel_f1=kernel_f1_temp;
 
weight_f1=weight_f1_temp;
weight_output=weight_output_temp;
 
end

  FUNCTION init_kernel

function [kernel_c1,kernel_f1]=init_kernel(layer_c1_num,layer_f1_num)
%卷积核初始化
for n=1:layer_c1_num
    kernel_c1(:,:,n)=(2*rand(5,5)-ones(5,5))/12;
end
for n=1:layer_f1_num
    kernel_f1(:,:,n)=(2*rand(12,12)-ones(12,12));
end
end

  FUNCTION pooling

 

function state=pooling(data,pooling_a)
%% 实现取样层pooling操作
[data_row,data_col]=size(data);
[pooling_row,pooling_col]=size(pooling_a);
for m=1:data_col/pooling_col
    for n=1:data_row/pooling_row
        state(m,n)=sum(sum(data(2*m-1:2*m,2*n-1:2*n).*pooling_a));
    end
end
end

  view figure

clc
clear
load data_1.mat infor accuracy
%%
A = size(infor);
figure(1)
hold on
plot(infor(:,1),‘bo‘);%实际类别
plot(infor(:,2),‘r+‘);%predict_label
legend(‘实际测试集分类‘,‘预测测试集分类‘);
%设置x轴范围和刻度
set(gca,‘XLim‘,[0 260]);%X轴的数据显示范围
set(gca,‘XTick‘,[0:10:260]);%设置要显示坐标刻度
% set(gca,‘XTickLabel‘,[0:1:10]);%给坐标加标签 

%设置y轴范围和刻度

set(gca,‘YLim‘,[1 26]);%X轴的数据显示范围
set(gca,‘YTick‘,[0:1:26]);%设置要显示坐标刻度
% set(gca,‘YTickLabel‘,[95:1:101]);%给坐标加标签 
grid on;

%%
data = transform(infor);
figure(2)
hold on
plot(data(:,1),‘bo‘);%实际类别
plot(data(:,2),‘r+‘);%predict_label
legend(‘实际测试集分类‘,‘预测测试集分类‘);
%设置x轴范围和刻度
set(gca,‘XLim‘,[0 260]);%X轴的数据显示范围
set(gca,‘XTick‘,[0:10:260]);%设置要显示坐标刻度
% set(gca,‘XTickLabel‘,[0:1:10]);%给坐标加标签 

%设置y轴范围和刻度

set(gca,‘YLim‘,[1 26]);%X轴的数据显示范围
set(gca,‘YTick‘,[0:1:26]);%设置要显示坐标刻度
% set(gca,‘YTickLabel‘,[95:1:101]);%给坐标加标签 
grid on;
%% 计算每个类别错误个数
error_cat_num = zeros(26,1);
for i=1:26
    number =0;
    for j= i*10-9 : i*10
        if data(j,1)- data(j,2)==0
        number =number+1;
        end
    end
   error_cat_num(i,1)=number; 
    
end


%%
%% 相关系数

%%
% 1. 相对误差error
input_test_label = data(:,1);
predict_label = data(:,2);
error = abs(predict_label - input_test_label)./input_test_label;
[N,~]=size(input_test_label);
%%
% 2. 决定系数R^2
R2 = (N * sum(predict_label .* input_test_label) - sum(predict_label) * sum(input_test_label))^2 / ((N * sum((predict_label).^2) - (sum(predict_label))^2) * (N * sum((input_test_label).^2) - (sum(input_test_label))^2)); 

%%
% 3. 结果对比
result = [input_test_label‘ predict_label‘ error‘]

%% VI. 绘图
figure
plot(1:N,input_test_label,‘b:*‘,1:N,predict_label,‘r-o‘)
legend(‘真实值‘,‘预测值‘)
xlabel(‘预测样本‘)
ylabel(‘标签值‘)
string = {‘测试集预测结果对比‘;[‘R^2=‘ num2str(R2)]};
title(string)

  

 

以上是关于DEMO的主要内容,如果未能解决你的问题,请参考以下文章

[异常解决] Keil安装好nRF51822开发环境,运行DEMO报错:Error:“GPIOTE_CONFIG_NUM_OF_LOW_POWER_ENVENTS” is undefined(代码片段

面试常用的代码片段

VS code自定义用户代码片段snippet

jquery 对象的 heightinnerHeightouterHeight 的区别以及DOM 元素的 clientHeightoffsetHeightscrollHeightoffset(代码片段

视频直接变漫画!GAN又有了新玩法|Demo+代码+论文

片段:java.lang.RuntimeException:传递结果ResultInfo失败