⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sofmprocess.m

📁 nnToolKit 神经网络工具包是基于 MATLAB 神经网络工具箱自行开发的一组神经网络算法函数库
💻 M
字号:
%此为Sofm网络处理程序,包含网络训练和仿真,同时将结果写入文件
function retstr = SofmProcess(ModelNo,ClassifyNum,TrainPara,ImgName,DataDir)
NNTWARN OFF
retstr=-1;
%%%% 输入参数赋值开始 %%%%%%%%%%%%%%%%%%%%%%%
% 方便调试程序用,程序调试时去掉这部分的注释
ModelNo='1';
ClassifyNum=7;  % 分类数
TrainPara(1)=50;   % 训练时显示频率
TrainPara(2)=10000; % 最多训练步数
TrainPara(3)=0.02; % 学习率

DataDir='.';
ImgName = 'image/imgrec_0.gif';
%%%% 输入参数赋值结束 %%%%%%%%%%%%%%%%%%%%%%%%
% 保留原目录
olddir=pwd;
%进入数据所在目录
cd(DataDir);
% 伪申明
%rehash(1);
for i=1:ClassifyNum
    % 定义ClassifyNum个类
    pp(i)=0; 
    % 像素点的灰度值
    cc(i)=0;
    % 分类后的像素重新排成一个一维矩阵
    eval(['d' num2str(i) '=[];']);
end

% 装载图像
pho= imread(ImgName);
%imshow(pho);
% 将图像变为双精度型
uu=im2double(pho);
% 将图像变为一维矩阵
x=[];
for i=1:256
    x=[x,uu(i,:)]; 
end

fw=fopen('x.dat','w');
fprintf(fw,'%9.4f ',x);
fclose(fw);

% 对前向网络进行初始化
w=initsm(x,ClassifyNum);

% 训练过程每df步显示1次数
df=TrainPara(1);
% 最大训练步数
me=TrainPara(2)
% 学习率
lr=TrainPara(3);
% 神经网络训练参数
tp=[df me lr];
m=nbgrid(ClassifyNum);
% 训练竞争层
w=trainsm(w,m,x,tp);
% 将训练结果权值写入文件
fww=fopen(sprintf('w%s%s',ModelNo,'.dat'),'w');
fprintf(fww,'%9.4f ',w);
fclose(fww);

d0=[];
for i=1:65536
    % SIMUC -竞争层仿真
    a =simusm(x(i),w,m,0);
    c=find(a);
    for j=1:ClassifyNum
     if c==j;
       pp(j)=pp(j)+1;
       cc(j)=w(c)*255;
     else
       cc(j)=0;
     end 
    end

    for j = 1:ClassifyNum
     eval(['d' num2str(j) '=[d' num2str(j) ',cc(' num2str(j) ')];']);
    end
    
%     ccc=w(c)*255;
%     d0=[d0,ccc];
end  
%将分类后的像素矩阵写入文件
for j=1:ClassifyNum
    fwd=fopen(sprintf('d%s%d%s',ModelNo,j,'.dat'),'w');
    fprintf(fwd,'%9.4f ',eval(['d' num2str(j)]));
    fclose(fwd);
end

% fwd=fopen(sprintf('d%s%s',ModelNo,'0.dat'),'w');
% fprintf(fwd,'%9.4f ',d0);
% fclose(fwd);

cd(olddir);

retstr=1;
close all;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -