MATALB 卷积神经网络 图片二分类

      正忙着写论文的时候,突然看到她的询问,连续两晚失眠,有了这个程序。以前没用过神经网络,所有代码都是基于别人基础上修改,仅限于能实现自己需要的功能。

     从GitHub找到一个创建用于图像识别的卷积神经网络的代码,代码下载,根据此修改。

%这里是训练数据存放的文件夹,里面有两个子文件夹,1是非正常的轨迹图,0是正常的轨迹图
Data = fullfile('C:\Users\清风\Desktop\网络训练数据集\');

 

因为我的是分为两类,所以有两个子文件夹,分别存着不同类的图片。注意该数据文件夹不要有多的子文件夹或图片

%测试数据的百分之几作为训练数据,剩下的作为测试
percent = 0.9;
fullyConnectedLayer(2);将数据分为几类

下面是训练参数设置,这两个参数影响着训练的好坏

%进行网络训练,1000是迭代次数,0.00005是学习效率,这两个数可以修改
options = trainingOptions('sgdm','MaxEpochs',1000, ...
	'InitialLearnRate',0.00005);

根据设置好的参数训练网络

convnet = trainNetwork(trainData,layers,options);

这是我的训练结果,迭代625次,正确率已经100%。

测试训练好的模型,

%将训练数据的一部分作为测试数据,测试训练好的网络识别正确率
YTest = classify(convnet,testData)
TTest = testData.Labels;
confMat = confusionmat(TTest, YTest);
accuracy = sum(YTest == TTest)/numel(TTest)

最后我将训练好的模型保存下来,便于以后调用

%保存训练好的网络
save('C:\Users\清风\Desktop\网络训练数据集\cnn3.mat','convnet');

此代码有两个问题需要注意:

第一次我所有的训练图片都为200*200的,结果提示内存不足。使用如下代码修改图片大小

img = imresize(img,[100,100]);

运行,该处代码报错

helperDisplayConfusionMatrix(confMat);

屏蔽掉,运行正常。

 

如何调用训练好的网络,请看我的下一篇博客:MATLAB调用训练好的卷积神经网络

  • 18
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 27
    评论
Matlab 中,您可以使用深度学习工具箱中的“卷积神经网络(Convolutional Neural Network,CNN)”来构建多输入模型。以下是一些可能有用的步骤: 1. 定义您的输入层。您可以使用“imageInputLayer”函数来定义每个输入图像的大小和通道数。 2. 创建一个卷积神经网络模型。您可以使用“convolution2dLayer”、“maxPooling2dLayer”和“fullyConnectedLayer”等函数来定义您的模型结构。 3. 将输入层与您的模型连接起来。您可以使用“concatenate”函数将多个输入层连接起来,例如: ``` input1 = imageInputLayer([32 32 3], 'Name', 'input1'); input2 = imageInputLayer([32 32 3], 'Name', 'input2'); concat = concatenateLayer(3, {'input1', 'input2'}, 'concat'); ``` 这将创建两个大小为 [32 32 3] 的输入层,并将它们连接成一个大小为 [32 32 6] 的层。 4. 训练您的模型。您可以使用“trainNetwork”函数来训练您的模型。请注意,您需要为每个输入提供一个对应的训练集和测试集。 以下是一个简单的示例代码,演示如何构建和训练一个具有两个输入的卷积神经网络模型: ``` % 定义第一个输入层 input1 = imageInputLayer([32 32 3], 'Name', 'input1'); % 定义第二个输入层 input2 = imageInputLayer([32 32 3], 'Name', 'input2'); % 将输入层连接起来 concat = concatenateLayer(3, {'input1', 'input2'}, 'concat'); % 定义卷积神经网络模型 conv1 = convolution2dLayer(3, 32, 'Padding', 1, 'Name', 'conv1'); relu1 = reluLayer('Name', 'relu1'); pool1 = maxPooling2dLayer(2, 'Stride', 2, 'Name', 'pool1'); conv2 = convolution2dLayer(3, 64, 'Padding', 1, 'Name', 'conv2'); relu2 = reluLayer('Name', 'relu2'); pool2 = maxPooling2dLayer(2, 'Stride', 2, 'Name', 'pool2'); fc1 = fullyConnectedLayer(128, 'Name', 'fc1'); fc2 = fullyConnectedLayer(10, 'Name', 'fc2'); softmax = softmaxLayer('Name', 'softmax'); output = classificationLayer('Name', 'output'); % 将所有层连接起来 layers = [concat, conv1, relu1, pool1, conv2, relu2, pool2, fc1, fc2, softmax, output]; % 定义训练选项 options = trainingOptions('sgdm', 'MaxEpochs', 20, 'InitialLearnRate', 0.001); % 训练模型 net = trainNetwork({X1, X2}, Y, layers, options); ``` 其中,X1 和 X2 分别是两个输入的训练图像数据,Y 是相应的分类标签。请注意,这里使用了“sgdm”优化器和学习率为 0.001 的初始学习率。您可以根据需要调整这些参数。
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值