matlab训练卷积神经网络预测手写数字倾斜角度

加载数据集

matlab提供了导入数据集的指令,数据集是内置的,可以自行查看digitTrain4DArrayData和digitTest4DArrayData的源码找到数据集的存储位置。

[XTrain,~,YTrain]=digitTrain4DArrayData;
[XValidation,~,YValidation]=digitTest4DArrayData;

可以随机查看几张数字

numTrainImages=numel(YTrain);
figure
idx=randperm(numTrainImages,20);
for ii=1:numel(idx)
    subplot(4,5,ii)
    imshow(XTrain(:,:,:,idx(ii)))
    drawnow
end

在这里插入图片描述

构建网络

构建网络的代码为,其中各种指令的含义见这篇文章

model=[
    imageInputLayer([28,28,1])
    convolution2dLayer([3,3],8,'Padding','same')
    batchNormalizationLayer
    reluLayer
    averagePooling2dLayer([2,2],'Stride',2)

    convolution2dLayer([3,3],16,'Padding','same')
    batchNormalizationLayer
    reluLayer
    averagePooling2dLayer([2,2],'Stride',2)

    convolution2dLayer([3,3],32,'Padding','same')
    batchNormalizationLayer
    reluLayer

    convolution2dLayer([3,3],64,'Padding','same')
    batchNormalizationLayer
    reluLayer

     dropoutLayer(0.2)
    fullyConnectedLayer(1)
    regressionLayer % 预测倾斜角度是回归操作,不是分类操作
];

训练网络

训练网络之前需要指定训练的参数,这里设置为,其中没有说明的参数见这篇文章

options=trainingOptions("sgdm", ...
    'MiniBatchSize',128, ...
    'MaxEpochs',30, ...
   'InitialLearnRate',0.001, ... % 初始学习率
   'LearnRateSchedule','piecewise', ...  % 学习率下降方式
   'LearnRateDropFactor',0.1, ... % 学习率下降因子,就是学习率每次更新的时候都乘以0.1
   'LearnRateDropPeriod',20, ... % 学习率下降周期,每迭代20次就下降一次
   'Shuffle','every-epoch', ...
   'ValidationData',{XValidation,YValidation}, ...
   'ValidationFrequency',floor(numel(YTrain)/128), ...
   'Plots','training-progress', ...
   'verbose',true);

随后便可以训练网络

net=trainNetwork(XTrain,YTrain,model,options)
YPredicted=predict(net,XValidation);
predictError=YValidation-YPredicted;
RMSE=sqrt(mean(predictError.^2))

在这里插入图片描述

完整代码

[XTrain,~,YTrain]=digitTrain4DArrayData;
[XValidation,~,YValidation]=digitTest4DArrayData;
numTrainImages=numel(YTrain);
figure
idx=randperm(numTrainImages,20);
for ii=1:numel(idx)
    subplot(4,5,ii)
    imshow(XTrain(:,:,:,idx(ii)))
    drawnow
end
model=[
    imageInputLayer([28,28,1])
    convolution2dLayer([3,3],8,'Padding','same')
    batchNormalizationLayer
    reluLayer
    averagePooling2dLayer([2,2],'Stride',2)

    convolution2dLayer([3,3],16,'Padding','same')
    batchNormalizationLayer
    reluLayer
    averagePooling2dLayer([2,2],'Stride',2)

    convolution2dLayer([3,3],32,'Padding','same')
    batchNormalizationLayer
    reluLayer

    convolution2dLayer([3,3],64,'Padding','same')
    batchNormalizationLayer
    reluLayer

     dropoutLayer(0.2)
    fullyConnectedLayer(1)
    regressionLayer % 预测倾斜角度是回归操作,不是分类操作

];
options=trainingOptions("sgdm", ...
    'MiniBatchSize',128, ...
    'MaxEpochs',30, ...
   'InitialLearnRate',0.001, ...
   'LearnRateSchedule','piecewise', ...
   'LearnRateDropFactor',0.1, ...
   'LearnRateDropPeriod',20, ...
   'Shuffle','every-epoch', ...
   'ValidationData',{XValidation,YValidation}, ...
   'ValidationFrequency',floor(numel(YTrain)/128), ...
   'Plots','training-progress', ...
   'verbose',true);

net=trainNetwork(XTrain,YTrain,model,options)
YPredicted=predict(net,XValidation);
predictError=YValidation-YPredicted;
RMSE=sqrt(mean(predictError.^2))



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用 MATLAB 实现的深度卷神经网络预测图片裂缝走向的示例代码。 首先,我们需要准备训练数据和测试数据。训练数据应该包括一组已知裂缝位置的图像和它们对应的裂缝走向标签。测试数据只需要包括一组未知裂缝位置的图像。 接下来,我们定义神经网络的结构。在这个示例中,我们使用了一个由卷层、池化层和全连接层组成的简单卷神经网络。具体的网络结构可以根据需求进行调整。 ```matlab layers = [ imageInputLayer([256 256 3]) convolution2dLayer(3, 16, 'Padding', 'same') batchNormalizationLayer reluLayer maxPooling2dLayer(2, 'Stride', 2) convolution2dLayer(3, 32, 'Padding', 'same') batchNormalizationLayer reluLayer maxPooling2dLayer(2, 'Stride', 2) convolution2dLayer(3, 64, 'Padding', 'same') batchNormalizationLayer reluLayer fullyConnectedLayer(128) reluLayer dropoutLayer(0.5) fullyConnectedLayer(2) regressionLayer ]; ``` 然后,我们定义训练选项并开始训练网络。 ```matlab options = trainingOptions('adam', ... 'MaxEpochs', 20, ... 'MiniBatchSize', 64, ... 'ValidationData', {testData, testLabels}, ... 'Plots', 'training-progress'); net = trainNetwork(trainData, trainLabels, layers, options); ``` 最后,我们可以使用训练好的模型来预测测试数据的裂缝走向,并将结果可视化。 ```matlab predictedLabels = predict(net, testData); figure; imshow(testImage); hold on; for i = 1:size(predictedLabels, 1) x = predictedLabels(i, 1) * size(testImage, 2); y = predictedLabels(i, 2) * size(testImage, 1); plot(x, y, 'rx', 'LineWidth', 2, 'MarkerSize', 10); end ``` 这里的 `testImage` 是我们要测试的图像。 `predictedLabels` 是一个表示裂缝走向的二维向量数组,其中每个向量包含 x 和 y 方向上的分量。 这就是一个简单的 MATLAB 实现的深度卷神经网络预测图片裂缝走向的示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值