零基础入门神经网络Matlab学习笔记

零基础快速入门Matlab神经网络,以通俗易懂的原理讲解并配套实战源码。包含RBF、BP、自组织竞争、SOM、Hopfield、SVM及粒子群(PSO)等神经网络的讲解。初学神经网络推荐。具体视频及源码、PPT已上传,下载请见:

https://download.csdn.net/download/qq_32809093/12008338

1 神经网络的6个基本问题

零基础入门神经网络Matlab学习笔记_第1张图片

零基础入门神经网络Matlab学习笔记_第2张图片

神经网络就是一个黑盒子,谁也不能保证其能百分百准确,所以如果系统要求百分百准确率,则不要使用神经网络进行控制

零基础入门神经网络Matlab学习笔记_第3张图片

回归就是个预测

零基础入门神经网络Matlab学习笔记_第4张图片

左边为预测,有三个数据表示其由三个组成部分组成,每次仅改变单个数据,每个组成部分比重相同(此都为1/3)

右边为存储,每次仅改变单个数据,每个组成部分比重不同

零基础入门神经网络Matlab学习笔记_第5张图片

有监督(supervised):输入输出一一对应。例如:BP网络(输入输出都有

无监督(unsupervised):只有输入,其目的为发掘输入数据的内在联系

零基础入门神经网络Matlab学习笔记_第6张图片

离线网络:需要先设计好网络,然后通过数据对网络进行训练后,再使用此网络

在线网络:可以边使用边训练网络(前期由于数据量少效果可能不是很好)

零基础入门神经网络Matlab学习笔记_第7张图片

零基础入门神经网络Matlab学习笔记_第8张图片

2 RBF神经网络

零基础入门神经网络Matlab学习笔记_第9张图片

零基础入门神经网络Matlab学习笔记_第10张图片

零基础入门神经网络Matlab学习笔记_第11张图片

RBF网络本意:把输入的数据从一个空间转换到另外一个空间

零基础入门神经网络Matlab学习笔记_第12张图片

零基础入门神经网络Matlab学习笔记_第13张图片

零基础入门神经网络Matlab学习笔记_第14张图片

零基础入门神经网络Matlab学习笔记_第15张图片

零基础入门神经网络Matlab学习笔记_第16张图片

零基础入门神经网络Matlab学习笔记_第17张图片

零基础入门神经网络Matlab学习笔记_第18张图片

神经网络:只知道数据,不知道模型,要做一个网络,来模拟这个模型

数学回归:知道带参数的数学函数表达式,通过数据带入,可求出具体函数表达式

零基础入门神经网络Matlab学习笔记_第19张图片

RBF网络程序1:使用随机生成数据,实现回归公式(使用newrb生成网络)

clc;
clear;
close all;

%产生输入,输出
ld=400; %学习数据的个数
%产生一个两维(对应x1、x2)的,共2*100个位于0-1之间的随机数据(或理解为100个二维数据)
x=rand(2,ld); % 0-1
x=(x-0.5)*1.5*2; % -1.5-1.5(改变x的取值范围,利于观察)
%提取产生的输入数据
x1=x(1, : );% x1为x的第一行
x2=x(2, : );% x2为x的第二行
F=20+x1.^2-10*cos(2*pi*x1)-10*cos(2*pi*x2);%产生输出数据

%创建并训练网络
net=newrb(x,F);%创建RBF网络,其自己会进行训练

%generate the testing data 产生模拟数据
interval=0.1; %间隔为0.1
[i, j]=meshgrid(-1.5:interval:1.5);%产生间隔为0.1,且位于-1.5-1.5之间的二维方框数据i和j,
row=size(i);
tx1=i(:);%将i转换成一维数据tx1
tx1=tx1';
tx2=j(:);%将j转换成一维数据tx2
tx2=tx2';
tx=[tx1;tx2];%将x1,x2合并转换为输入tx

%testing 画出模拟函数
ty=sim(net,tx);%将tx带入网络进行模拟,输出为ty

v=reshape(ty,row);
figure
subplot(1,3,2)
mesh(i,j,v);%绘制i,j输入对应输出v曲线
zlim([0,60])

%plot the original function 画出原函数
interval=0.1;
[x1, x2]=meshgrid(-1.5:interval:1.5);
F = 20+x1.^2-10*cos(2*pi*x1)-10*cos(2*pi*x2);%F为理想输出
subplot(1,3,1)
mesh(x1,x2,F);%绘制x1,x2输入对应输出F曲线
zlim([0,60])

%plot the error 画出偏差
subplot(1,3,3)
mesh(x1,x2,F-v);%绘制x1,x2输入对应输出F-v曲线。F-v为理想输出与神经网络之间的误差
zlim([0,60])

零基础入门神经网络Matlab学习笔记_第20张图片

零基础入门神经网络Matlab学习笔记_第21张图片

RBF网络程序2:使用随机生成数据,实现回归公式(使用newrbe生成网络)

%Generate some training data
clc;
clear;
interval=0.01;
x1=-1.5:interval:1.5;
x2=-1.5:interval:1.5;
F = 20+x1.^2-10*cos(2*pi*x1)-10*cos(2*pi*x2);
net=newrbe([x1;x2],F)%创建并训练网络

ty=sim(net,[x1;x2]);%将tx带入网络进行模拟,输出为ty
figure
plot3(x1,x2,F,'g');%plot the original function 画出原函数
figure
plot3(x1,x2,ty,'b');%testing 画出模拟函数

零基础入门神经网络Matlab学习笔记_第22张图片

3 BP神经网络

零基础入门神经网络Matlab学习笔记_第23张图片

零基础入门神经网络Matlab学习笔记_第24张图片

零基础入门神经网络Matlab学习笔记_第25张图片

神经网络:怎么利用机器语言模仿人脑,来做决定的过程

零基础入门神经网络Matlab学习笔记_第26张图片

理性世界:每一件事情的发生,都是由于其他事情造成的

所有控制、预测、统计都可以使用神经网络。

零基础入门神经网络Matlab学习笔记_第27张图片

w1、w2权重的调整是减少误差的过程

零基础入门神经网络Matlab学习笔记_第28张图片

一层网络可能不能进行非线性分类,所以引入多层神经网络

BP(Backpropagation):从后往前来更新权重

零基础入门神经网络Matlab学习笔记_第29张图片

零基础入门神经网络Matlab学习笔记_第30张图片

零基础入门神经网络Matlab学习笔记_第31张图片

BP网络程序:对人脸角度进行预测

%function mytest()
%一共有15张人脸图片,每张图片提取八个数据,T为对应方向输出
clc;
images=[ ];  
M_train=3;%表示人脸
N_train=5;%表示方向   分别为(左110   左中101   中001    右中110   右101)
sample=[];  
pixel_value=[];
sample_number=0;

  for j=1:N_train
      for i=1:M_train
    str=strcat('Images\',num2str(i),'_',num2str(j),'.bmp'); %读取图像,连接字符串形成图像的文件名。
    img= imread(str);  
    [rows cols]= size(img);%获得图像的行和列值。
     img_edge=edge(img,'Sobel');

    
     %由于在分割图片中我们可以看到这个人脸的眼睛部分也就是位于分割后的第二行中,位置变化比较大,而且眼睛边缘检测效果很好
     
     sub_rows=floor(rows/6);%最接近的最小整数,分成6行
     sub_cols=floor(cols/8);%最接近的最小整数,分成8列
     sample_num=M_train*N_train;%前5个是第一幅人脸的5个角度
    
     sample_number=sample_number+1;
     for subblock_i=1:8 %因为这还在i,j的循环中,所以不可以用i 
           block_num=subblock_i;
           pixel_value(sample_number,block_num)=0;  
            for ii=sub_rows:(2*sub_rows)
             for jj=(subblock_i-1)*sub_cols+1:subblock_i*sub_cols
                 pixel_value(sample_number,block_num)=pixel_value(sample_number,block_num)+img_edge(ii,jj);          
             end
            end     
     end  
  end
  end
  %将特征值转换为小于1的值
 max_pixel_value=max(pixel_value);
  max_pixel_value_1=max(max_pixel_value); 
  for i=1:3
      mid_value=10^i;
      if(((max_pixel_value_1/mid_value)>1)&&((max_pixel_value_1/mid_value)<10))
         multiple_num=1/mid_value; 
         pixel_value=pixel_value*multiple_num; 
         break;
      end
  end     
  

% T 为目标矢量 
    t=zeros(3,sample_number);
    %因为有五类,所以至少用3个数表示,5介于2的2次方和2的3次方之间
    for i=1:sample_number
        % if((mod(i,5)==1)||(mod(i,5)==4)||(mod(i,5)==0))
        if(i<=3)||((i>9)&&(i<=12))||((i>12)&&(i<=15))
            t(1,i)=1;
        end    
        %if((mod(i,5)==2)||(mod(i,5)==4)) 
        if((i>3)&&(i<=6))||((i>9)&&(i<=12))
            t(2,i)=1;
        end        
        %if((mod(i,5)==3)||(mod(i,5)==0)) 
        if((i>6)&&(i<=9))||((i>12)&&(i<=15))
            t(3,i)=1;
        end           
    end  
    零基础入门神经网络Matlab学习笔记_第32张图片
    
   

% NEWFF——生成一个新的前向神经网络 
% TRAIN——对 BP 神经网络进行训练 
% SIM——对 BP 神经网络进行仿真 

%  定义训练样本 
% P 为输入矢量 
P=pixel_value'
% T 为目标矢量 
T=t
size(P)
size(T)
% size(P)
% size(T)


%  创建一个新的前向神经网络  
net_1=newff(minmax(P),[10,3],{'tansig','purelin'},'traingdm')%P为输入矩阵,minmax(P)为找出P的最大值与最小值作为输入数据的范围
%输出层为3(输出层有三个神经元),有一个中间层(隐藏层),此隐藏层有10个神经元
%若为[10,10,3],则为两个中间层,且每层10个神经元
%  当前输入层权值阈值 
inputWeights=net_1.IW{1,1} 
inputbias=net_1.b{1} 

零基础入门神经网络Matlab学习笔记_第33张图片                
%  当前网络层权值和阈值 
layerWeights=net_1.LW{2,1} 
layerbias=net_1.b{2} 

零基础入门神经网络Matlab学习笔记_第34张图片       

%  设置训练参数
net_1.trainParam.show = 50; 
net_1.trainParam.lr = 0.05; 
net_1.trainParam.mc = 0.9; 
net_1.trainParam.epochs = 10000; %每训练1000次显示一次结果
net_1.trainParam.goal = 1e-3; %训练误差要求0.001

%  调用 TRAINGDM 算法训练 BP 网络
[net_1,tr]=train(net_1,P,T); 

零基础入门神经网络Matlab学习笔记_第35张图片

%  对 BP 网络进行仿真
A = sim(net_1,P); 
%  计算仿真误差  
E = T - A; 
MSE=mse(E) 

%随机举一个图片提取的8个数据代入网络判断(代入第一张图片数据)
x=[0.87 1.43 0.91 3.19 0.55 0 0.1 0]';
sim(net_1,x)

可见其接近1 0 0 所以朝向为左。

4 自组织竞争网络及其matlab的实现

零基础入门神经网络Matlab学习笔记_第36张图片

零基础入门神经网络Matlab学习笔记_第37张图片

零基础入门神经网络Matlab学习笔记_第38张图片

零基础入门神经网络Matlab学习笔记_第39张图片

零基础入门神经网络Matlab学习笔记_第40张图片

调整当前目录,导入基因数据txt文档

零基础入门神经网络Matlab学习笔记_第41张图片

零基础入门神经网络Matlab学习笔记_第42张图片

 

零基础入门神经网络Matlab学习笔记_第43张图片

零基础入门神经网络Matlab学习笔记_第44张图片

零基础入门神经网络Matlab学习笔记_第45张图片

零基础入门神经网络Matlab学习笔记_第46张图片

零基础入门神经网络Matlab学习笔记_第47张图片

 

5 SOM神经网络理论及其Matlab实现

6 离散Hopfield神经网络(DHNN)及其MATLAB实现

零基础入门神经网络Matlab学习笔记_第48张图片

零基础入门神经网络Matlab学习笔记_第49张图片

零基础入门神经网络Matlab学习笔记_第50张图片

零基础入门神经网络Matlab学习笔记_第51张图片

零基础入门神经网络Matlab学习笔记_第52张图片

Hopfield是循环的,有反馈的闭环的网络

零基础入门神经网络Matlab学习笔记_第53张图片

零基础入门神经网络Matlab学习笔记_第54张图片

零基础入门神经网络Matlab学习笔记_第55张图片

零基础入门神经网络Matlab学习笔记_第56张图片

 

零基础入门神经网络Matlab学习笔记_第57张图片

零基础入门神经网络Matlab学习笔记_第58张图片

数字模型程序:

%0~9的数字模型
% 每个稳态由10*10的矩阵构成,该矩阵用于模拟阿拉伯数字点阵。
% 即将数字划分成10*10方阵,有数字的部分用1表示,空白处用-1表示
zero=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
     -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
     -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
     -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
     -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1];
ZERO=imresize(zero,20);%对图像zero进行绘制并放大20倍
subplot(2,5,1)
imshow(ZERO)

one=[-1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
     -1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
     -1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
     -1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
     -1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1];
 ONE=imresize(one,20);
 subplot(2,5,2)
 imshow(ONE)
 
 two=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
       -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
        -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
       -1 1 1 -1 -1 -1 -1 -1 -1 -1;-1 1 1 -1 -1 -1 -1 -1 -1 -1;...
       -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1];
 TWO=imresize(two,20);
 subplot(2,5,3)
 imshow(TWO)
 
 three=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
       -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
        -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
       -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
       -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1];
 THREE=imresize(three,20);
 subplot(2,5,4)
 imshow(THREE)
 
 four=[-1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
      -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
      -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
      -1 1 1 1 1 1 1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
      -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1];
 FOUR=imresize(four,20);
 subplot(2,5,5)
 imshow(FOUR)
 
 five=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
       -1 1 1 -1 -1 -1 -1 -1 -1 -1;-1 1 1 -1 -1 -1 -1 -1 -1 -1;...
       -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
       -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
       -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1];
 FIVE=imresize(five,20);
 subplot(2,5,6)
 imshow(FIVE)
 
 six=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
      -1 1 1 -1 -1 -1 -1 -1 -1 -1;-1 1 1 -1 -1 -1 -1 -1 -1 -1;...
      -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
      -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
      -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1];
 SIX=imresize(six,20);
 subplot(2,5,7)
 imshow(SIX)

 seven=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
      -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
      -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
      -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
      -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1];
 SEVEN=imresize(seven,20);
 subplot(2,5,8)
 imshow(SEVEN)
 
 eight=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
        -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
        -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
        -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
        -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1];
EIGHT=imresize(eight,20);
subplot(2,5,9)
imshow(EIGHT)

nine=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
      -1 1 1 -1 -1 -1 -1 1 1 -1;-1 1 1 -1 -1 -1 -1 1 1 -1;...
      -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
      -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
      -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1];
 NINE=imresize(nine,20);
 subplot(2,5,10)
 imshow(NINE)

零基础入门神经网络Matlab学习笔记_第59张图片

数字识别程序:

% ------------------------standard number array-----------------------
%标准数字数组
one=[-1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
     -1 -1 -1 -1 1 1 -1 -1 -1 -1; -1 -1 -1 -1 1 1 -1 -1 -1 -1;...
     -1 -1 -1 -1 1 1 -1 -1 -1 -1; -1 -1 -1 -1 1 1 -1 -1 -1 -1;...
     -1 -1 -1 -1 1 1 -1 -1 -1 -1; -1 -1 -1 -1 1 1 -1 -1 -1 -1;...
     -1 -1 -1 -1 1 1 -1 -1 -1 -1; -1 -1 -1 -1 1 1 -1 -1 -1 -1];
 零基础入门神经网络Matlab学习笔记_第60张图片
two=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
     -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
     -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
     -1 1 1 -1 -1 -1 -1 -1 -1 -1;-1 1 1 -1 -1 -1 -1 -1 -1 -1;...
     -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1];

零基础入门神经网络Matlab学习笔记_第61张图片
  
%   ----------------------plot standard number figure----------------- 
%绘制标准数字
 ONE=imresize(one,20);
 subplot(3,2,1)%subplot(m,n,p)在一个图像窗口切成m*n个小图像,其中此处显示第一个图像one(p从左到右从上到下增大)
 imshow(ONE)
 title('stand number')
 
 TWO=imresize(two,20);
 subplot(3,2,2)
 imshow(TWO)
 title('stand number')
 
%  ----------------------create hopfield net--------------------------
%生成hopfield网络
 T=[one;two]';
 net=newhop(T);

 % -----------------------noise array(rand noise)-----------------
 %随机加入噪声
            rand('state',0);%初始化随机发生器
            for i=1:100
                a=rand;%产生0~1的随机数
                if a<0.1%加入10%的干扰,如果参数随机数小于0.1则标准数字取反
                   one(i)=-one(i);
                   two(i)=-two(i);
                end
            end
            no1=one;%噪声矩阵no1
            no2=two;
 
%  -------------------------plot noisy figure---------------
%绘制噪声数字
 subplot(3,2,3)
 NO1=imresize(no1,20);
 imshow(NO1)
 title('noisy number')

零基础入门神经网络Matlab学习笔记_第62张图片
 subplot(3,2,4)
 NO2=imresize(no2,20);
 imshow(NO2)
 title('noisy number')

零基础入门神经网络Matlab学习笔记_第63张图片
 
% --------------------------plot identify figure--------------
 
noise1={(no1)'};%将矩阵no1进行转置得到noise1
tu1=sim(net,{10,10},{},noise1);%将noise1通过神经网络仿真得到tu1
tu1{10}'
subplot(3,2,5)
imshow(imresize(tu1{10}',20))%对图像tul取转置后进行绘制并放大20倍
title('identify number')

noise2={(no2)'};
tu2=sim(net,{10,10},{},noise2);
tu2{10}'
subplot(3,2,6)
imshow(imresize(tu2{10}',20))
title('identify number')

 

tu1{10}'矩阵:

零基础入门神经网络Matlab学习笔记_第64张图片零基础入门神经网络Matlab学习笔记_第65张图片

tu2{10}'矩阵:

零基础入门神经网络Matlab学习笔记_第66张图片零基础入门神经网络Matlab学习笔记_第67张图片

当干扰为5%

零基础入门神经网络Matlab学习笔记_第68张图片

当干扰为10%

零基础入门神经网络Matlab学习笔记_第69张图片

当干扰为20%

零基础入门神经网络Matlab学习笔记_第70张图片

 

7 连续Hopfield神经网络(CHNN)及其MATLAB实现

零基础入门神经网络Matlab学习笔记_第71张图片

零基础入门神经网络Matlab学习笔记_第72张图片

零基础入门神经网络Matlab学习笔记_第73张图片

零基础入门神经网络Matlab学习笔记_第74张图片

零基础入门神经网络Matlab学习笔记_第75张图片

零基础入门神经网络Matlab学习笔记_第76张图片

零基础入门神经网络Matlab学习笔记_第77张图片

零基础入门神经网络Matlab学习笔记_第78张图片

零基础入门神经网络Matlab学习笔记_第79张图片

零基础入门神经网络Matlab学习笔记_第80张图片

零基础入门神经网络Matlab学习笔记_第81张图片

零基础入门神经网络Matlab学习笔记_第82张图片

Hopfield网络求解TSP问题的仿真程序:chap8_5.m

% TSP Solving by Hopfield Neural Network

%function TSP_hopfield()
clear all;
close all;

% step 1 设置相关参数
A=1.5;
D=1;
u0=0.02;
step=0.01;

% step 2 读取8.txt中8个城市的坐标,计算各个城市之间的距离
N=8;
citys=load('8.txt');
Initial_Length=Initial_RouteLength(citys);        % 计算初始路径长度

DistanceCity=dist(citys,citys');%每个城市与其它城市之间距离矩阵DistanceCity(1-1 1-2 ... 1-8)1-2指城市1与城市2之间的距离
%citys为8行*2列   citys'为2行*8列                                                                    % (2-1  2-2 ... 2-8)
% step 3 初始化神经元输入                                                                              % (8-1  8-2 ... 8-8)                                                      零基础入门神经网络Matlab学习笔记_第83张图片
u=2*rand(N,N)-1;%产生随机数u范围为-1~1
U=0.5*u0*log(N-1)+u;%神经网络输入U
V=(1+tanh(U/u0))/2;%神经网络输出V

for k=1:1:2000%迭代次数2000步
    times(k)=k;
    
%     step 4 计算dU
    dU=DeltaU(V,DistanceCity,A,D);
    
%     step 5 及时更新U
    U=U+dU*step;
    
%     step 6 计算神经元输出V
    V=(1+tanh(U/u0))/2;
    
%     step 7 计算能量函数
    E=Energy(V,DistanceCity,A,D);
    Ep(k)=E;
    
%     step 8 检查路径合法性
    [V1,CheckR]=RouteCheck(V);
end

% step 9
if (CheckR==0)
    Final_E=Energy(V1,DistanceCity,A,D);   %最优能量
    Final_Length=Final_RouteLength(V1,citys);       % 计算最终路径长度
    disp('迭代次数');k


    disp('寻优路径矩阵:');V1

零基础入门神经网络Matlab学习笔记_第84张图片
    disp('最优能量函数:');Final_E

零基础入门神经网络Matlab学习笔记_第85张图片
    disp('初始路程:');Initial_Length


    disp('最短路程:');Final_Length

零基础入门神经网络Matlab学习笔记_第86张图片
    PlotR(V1,citys);    % 寻优路径作图函数
else
    disp('寻优路径无效');
end

%绘制能量函数
figure(2);
plot(times,Ep,'r');
title('Energy Function Change');
xlabel('k');
ylabel('E');


能量函数随迭代次数的变化:

零基础入门神经网络Matlab学习笔记_第87张图片

能量函数随时间单调下降,E的最小点对应问题的最优解

初始路径及优化后的路径:

零基础入门神经网络Matlab学习笔记_第88张图片

初始路径:1-2-3-4-5-6-7-8-1     优化路径:5-6-4-7-1-8-3-2-5

注:由于网络输入U初始选择的随机性,可能会导致初始化的寻优路径无效,当寻优失败时,需要重新运行优化程序。(90%以上可收敛得到最优解)

改变初试坐标:

零基础入门神经网络Matlab学习笔记_第89张图片

零基础入门神经网络Matlab学习笔记_第90张图片

零基础入门神经网络Matlab学习笔记_第91张图片

8 SVM神经网络理论实际应用

9 粒子群算法(PSO)实现函数极值优化

零基础入门神经网络Matlab学习笔记_第92张图片

零基础入门神经网络Matlab学习笔记_第93张图片

零基础入门神经网络Matlab学习笔记_第94张图片

零基础入门神经网络Matlab学习笔记_第95张图片

POS程序:

%% 清空环境
clc
clear

%% 参数初始化
%粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;

maxgen=200;   % 进化次数  
sizepop=20;   %种群规模

Vmax=1;
Vmin=-1;
popmax=5;
popmin=-5;

%% 产生初始粒子和速度
for i=1:sizepop
    %随机产生一个种群
    pop(i,:)=5*rands(1,2);    %初始种群
    V(i,:)=rands(1,2);  %初始化速度
    %计算适应度
    fitness(i)=fun(pop(i,:));   %染色体的适应度
end

%找最好的染色体
[bestfitness bestindex]=min(fitness);
zbest=pop(bestindex,:);   %全局最佳
gbest=pop;    %个体最佳
fitnessgbest=fitness;   %个体最佳适应度值
fitnesszbest=bestfitness;   %全局最佳适应度值

%% 迭代寻优
for i=1:maxgen
    
    for j=1:sizepop
        
        %速度更新
        V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
        V(j,find(V(j,:)>Vmax))=Vmax;
        V(j,find(V(j,:)         
        %种群更新
        pop(j,:)=pop(j,:)+0.5*V(j,:);
        pop(j,find(pop(j,:)>popmax))=popmax;
        pop(j,find(pop(j,:)         
        %自适应变异
        if rand>0.8
            k=ceil(2*rand);
            pop(j,k)=rand;
        end
      
        %适应度值
        fitness(j)=fun(pop(j,:));
        
        
        %个体最优更新
        if fitness(j) < fitnessgbest(j)
            gbest(j,:) = pop(j,:);
            fitnessgbest(j) = fitness(j);
        end
        
        %群体最优更新
        if fitness(j) < fitnesszbest
            zbest = pop(j,:);
            fitnesszbest = fitness(j);
        end
        
    end
    yy(i)=fitnesszbest;    
        
end

%% 结果分析
plot(yy)
title(['适应度曲线  ' '终止代数=' num2str(maxgen)]);
xlabel('进化代数');ylabel('适应度');

zbest

零基础入门神经网络Matlab学习笔记_第96张图片

10 LibSVM工具箱的下载、安装、使用教程

你可能感兴趣的:(控制)