📄 sofmprocess.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 + -