Matlab DNN多层感知机进行图像分类——附源码分享

本文介绍了如何在MATLAB中利用newff函数实现简单的深度神经网络(DNN)进行图像分类。作者通过手动绘制10张图片并进行预处理,构建了一个小型训练集,并对图像添加不同比例的噪声以模拟测试集。经过训练后,展示了DNN的分类效果,尽管基础DNN在处理这类任务时表现有限,作者仍建议深度学习更适用于Python环境。
摘要由CSDN通过智能技术生成

提示:麻烦点赞,拒绝白嫖


前言

Python不香吗?非得用matlab来搞机器学习的东西?不是不是,matlab也有集成了许多机器学习算法,当然,都是一些非常基础的机器学习算法。深度学习还是得向python看齐。今天试用了一下matlab自带的DNN模型,封装在newff函数里,寥寥几行代码,非常简洁。


提示:以下是本篇文章正文内容,下面案例可供参考

一、数据来源

打开画图软件自己画了10张图片,5张为A,5张为B,如下:

在这里插入图片描述

将它们再次一一截取,得到10张图片作为训练集。随便找了一张,加入随机噪声得到测试集,以下为分别添加10%噪声,20%噪声,30%噪声。

在这里插入图片描述](https://img-blog.csdnimg.cn/68865d33339c454eb3add0da317018d1.png)![在这里插入图片描述

二、训练+预测_一步到位源码

1.DNN.m

clear;clc;
traindata = [];

A = imread('a1.png');
A = imresize(A,[50 50],'bilinear');
n=graythresh(A);
I = double(~im2bw(A,n));
I = reshape(I,1,2500);
traindata = [traindata;I];

A = imread('a2.png');
A = imresize(A,[50 50],'bilinear');
n=graythresh(A);
I = double(~im2bw(A,n));
I = reshape(I,1,2500);
traindata = [traindata;I];

A = imread('a3.png');
A = imresize(A,[50 50],'bilinear');
n=graythresh(A);
I = double(~im2bw(A,n));
I = reshape(I,1,2500);
traindata = [traindata;I];

A = imread('a4.png');
A = imresize(A,[50 50],'bilinear');
n=graythresh(A);
I = double(~im2bw(A,n));
I = reshape(I,1,2500);
traindata = [traindata;I];

A = imread('a5.png');
A = imresize(A,[50 50],'bilinear');
n=graythresh(A);
I = double(~im2bw(A,n));
I = reshape(I,1,2500);
traindata = [traindata;I];

A = imread('b1.png');
A = imresize(A,[50 50],'bilinear');
n=graythresh(A);
I = double(~im2bw(A,n));
I = reshape(I,1,2500);
traindata = [traindata;I];

A = imread('b2.png');
A = imresize(A,[50 50],'bilinear');
n=graythresh(A);
I = double(~im2bw(A,n));
I = reshape(I,1,2500);
traindata = [traindata;I];

A = imread('b3.png');
A = imresize(A,[50 50],'bilinear');
n=graythresh(A);
I = double(~im2bw(A,n));
I = reshape(I,1,2500);
traindata = [traindata;I];

A = imread('b4.png');
A = imresize(A,[50 50],'bilinear');
n=graythresh(A);
I = double(~im2bw(A,n));
I = reshape(I,1,2500);
traindata = [traindata;I];

A = imread('b5.png');
A = imresize(A,[50 50],'bilinear');
n=graythresh(A);
I = double(~im2bw(A,n));
I = reshape(I,1,2500);
traindata = [traindata;I];

class = [1;1;1;1;1;2;2;2;2;2];
c = [1;1;1;1;1;2;2;2;2;2];

R1  = randsrc(10,2500,[0,1;0.9,0.1]);
test1 = traindata - R1;
test1(test1<0) = 1;

R2  = randsrc(10,2500,[0,1;0.8,0.2]);
test2 = traindata - R2;
test2(test2<0) = 1;

R3  = randsrc(10,2500,[0,1;0.7,0.3]);
test3 = traindata - R3;
test3(test3<0) = 1;

%特征值归一化
% [input,minI,maxI] = premnmx(traindata)  ;
input =  traindata;
%构造输出矩阵
s = length( class) ;
output = zeros( s , 2  ) ;
for i = 1 : s 
   output( i , class( i )  ) = 1 ;
end
%创建神经网络
net = newff( minmax(input') ,output', [500 100 10] , { 'logsig' 'purelin' } , 'traingdx' ) ; 

%设置训练參数
net.trainparam.show = 50 ;% 显示中间结果的周期
net.trainparam.epochs = 500 ;%最
net.trainParam.lr = 0.01 ;%学习速率(Learning 大迭代次数(学习次数)
net.trainparam.goal = 0.01 ;%神经网络训练的目标误差rate)
%开始训练
%其中input为训练集的输入信号,对应output为训练集的输出结果
net = train( net, input' , output' ) ;
%================================训练完成====================================%
%=============================接下来进行测试=================================%
 %测试数据归一化
% testInput = tramnmx ( test1' , minI, maxI ) ;
%[testInput,minI,maxI] = premnmx( [t1 , t2 , t3 , t4 ]');

% 测试1
Y = sim( net , test1' );
[s1 , s2] = size( Y ) ;
hitNum = 0 ;
for i = 1 : s2
    [m , Index] = max( Y( : ,  i ) ) ;
    if( Index  == c(i)   ) 
        hitNum = hitNum + 1 ; 
    end
end
sprintf('Test1 Accuracy is %3.3f%%',100 * hitNum / s2 )

% 测试2
% Y = sim( net , test2' );
% [s1 , s2] = size( Y ) ;
% hitNum = 0 ;
% for i = 1 : s2
%     [m , Index] = max( Y( : ,  i ) ) ;
%     if( Index  == c(i)   ) 
%         hitNum = hitNum + 1 ; 
%     end
% end
% sprintf('Test2 Accuracy is %3.3f%%',100 * hitNum / s2 )
% 
% % 测试3
% Y = sim( net , test3' );
% [s1 , s2] = size( Y ) ;
% hitNum = 0 ;
% for i = 1 : s2
%     [m , Index] = max( Y( : ,  i ) ) ;
%     if( Index  == c(i)   ) 
%         hitNum = hitNum + 1 ; 
%     end
% end
% sprintf('Test3 Accuracy is %3.3f%%',100 * hitNum / s2 )

总结

拿最基础的DNN搞这个图片分类很难搞,而且matlab只适合机器学习,深度学习建议转python。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是狮子搏兔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值