matlab bp网络 函数模拟
我们最近要交一个作业,在下想用bp网络实现,大侠能帮帮我吗?比如给一组数据,两幅图像相同坐标区域内64个像素点的值,用bp网络模拟前后两幅图这些对应像素点值间函数关系。怎...
我们最近要交一个作业,在下想用bp网络实现,大侠能帮帮我吗?
比如给一组数据,两幅图像相同坐标区域内64个像素点的值,用bp网络模拟前后两幅图这些对应像素点值间函数关系。怎么实现啊?
我的程序如下,可效果不好
clc;
i1=imread('8.bmp');
i1=i1(70:75,70:75);%取图中变化明显区域附近基本没有变化区域
figure(1)
imshow(uint8(i1));
[m,n]=size(i1);
h1=zeros(m*n,1);%初始化h1,h2为零向量
h2=zeros(m*n,1);
for i=1:m*n
h1(i)=i1(i);%将该区域内向素值转化为列向量
end
h1=h1';
i2=imread('7.bmp');
i2=i2(70:75,70:75);
figure(2)
imshow(uint8(i2));
for j=1:m*n
h2(j)=i2(j);
end
h2=h2';
figure(3)
plot(h1,h2,'*r');
title('要逼近的函数');
xlabel('原图像素点灰度值');
ylabel('目标图像素点灰度值');
n=3;
net=newff(minmax(h1),[n,1],{'tansig','purelin'},'trainlm');
y1=sim(net,h1);
figure(4);
plot(h1,h2,'*r',h1,y1,'*b');
title('未训练网络的输出结果');
xlabel('像素点灰度值');
ylabel('仿真输出蓝色 原函数红色');
net.trainParam.epochs = 100;
net.trainParam.goal = 0.001;
net = train(net,h1,h2);
% 测试网络
y2 = sim(net,h1);
figure(5);
plot(h1,h2,'*r',h1,y1,'*b',h1,y2,'*g')
title('训练后网络的输出结果');
xlabel('原图像素点灰度值');
ylabel('目标图像像素点灰度值');
请高手帮帮在下吧! 展开
比如给一组数据,两幅图像相同坐标区域内64个像素点的值,用bp网络模拟前后两幅图这些对应像素点值间函数关系。怎么实现啊?
我的程序如下,可效果不好
clc;
i1=imread('8.bmp');
i1=i1(70:75,70:75);%取图中变化明显区域附近基本没有变化区域
figure(1)
imshow(uint8(i1));
[m,n]=size(i1);
h1=zeros(m*n,1);%初始化h1,h2为零向量
h2=zeros(m*n,1);
for i=1:m*n
h1(i)=i1(i);%将该区域内向素值转化为列向量
end
h1=h1';
i2=imread('7.bmp');
i2=i2(70:75,70:75);
figure(2)
imshow(uint8(i2));
for j=1:m*n
h2(j)=i2(j);
end
h2=h2';
figure(3)
plot(h1,h2,'*r');
title('要逼近的函数');
xlabel('原图像素点灰度值');
ylabel('目标图像素点灰度值');
n=3;
net=newff(minmax(h1),[n,1],{'tansig','purelin'},'trainlm');
y1=sim(net,h1);
figure(4);
plot(h1,h2,'*r',h1,y1,'*b');
title('未训练网络的输出结果');
xlabel('像素点灰度值');
ylabel('仿真输出蓝色 原函数红色');
net.trainParam.epochs = 100;
net.trainParam.goal = 0.001;
net = train(net,h1,h2);
% 测试网络
y2 = sim(net,h1);
figure(5);
plot(h1,h2,'*r',h1,y1,'*b',h1,y2,'*g')
title('训练后网络的输出结果');
xlabel('原图像素点灰度值');
ylabel('目标图像像素点灰度值');
请高手帮帮在下吧! 展开
1个回答
展开全部
1.n=3;
net=newff(minmax(h1),[n,1],{'tansig','purelin'},'trainlm');
h1要是是64的话,隐层的神经元数n=3太小了吧,换个8~12看看。
2.你说的效果不好是训练后误差太高吧,不知道你是用灰度图0~255做输入还 是用二值化以后的逻辑值0,1做输入?
net=newff(minmax(h1),[n,1],{'tansig','purelin'},'trainlm');要是用灰度图的话把tansig改成logsig看看。要是用二值化以后的逻辑值输入,就把tansig和purelin都改成logsig
3 训练步数net.trainParam.epochs = 100;设个1000吧,反正也多跑那么几毫秒
net=newff(minmax(h1),[n,1],{'tansig','purelin'},'trainlm');
h1要是是64的话,隐层的神经元数n=3太小了吧,换个8~12看看。
2.你说的效果不好是训练后误差太高吧,不知道你是用灰度图0~255做输入还 是用二值化以后的逻辑值0,1做输入?
net=newff(minmax(h1),[n,1],{'tansig','purelin'},'trainlm');要是用灰度图的话把tansig改成logsig看看。要是用二值化以后的逻辑值输入,就把tansig和purelin都改成logsig
3 训练步数net.trainParam.epochs = 100;设个1000吧,反正也多跑那么几毫秒
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询