目录
在 MATLAB 中进行其他类型的深度学习任务也非常方便。MATLAB 提供了 Deep Learning Toolbox,支持多种深度学习任务,包括但不限于图像分类、目标检测、语义分割、时间序列预测等。下面是一些常见任务的示例代码和说明。
1. 图像分类
数据准备
matlab
深色版本
% 加载内置数据集
[data, labels] = digitTrain4DArrayData();
% 划分训练集和测试集
idx = randperm(size(data, 4));
data = data(:,:,:,idx);
labels = labels(idx);
trainData = data(:,:,:,1:2000);
trainLabels = labels(1:2000);
testData = data(:,:,:,2001:end);
testLabels = labels(2001:end);
定义网络架构
matlab
深色版本
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3, 16, 'Padding', 'same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2, 'Stride', 2)
convolution2dLayer(3, 32, 'Padding', 'same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2, 'Stride', 2)
fullyConnectedLayer(10)
softmaxLayer
classificationLayer
];
设置训练选项
matlab
深色版本
options = trainingOptions('adam', ...
'MaxEpochs', 10, ...
'MiniBatchSize', 128, ...
'Plots', 'training-progress', ...
'Verbose', false);
训练模型
matlab
深色版本
net = trainNetwork(trainData, trainLabels, layers, options);
评估模型
matlab
深色版本
YPred = classify(net, testData);
YTrue = testLabels;
accuracy = sum(YPred == YTrue) / numel(YTrue);
fprintf('Accuracy: %.2f%%\n', accuracy * 100);
2. 目标检测
数据准备
matlab
深色版本
% 加载内置数据集
imds = imageDatastore(fullfile(matlabroot,'toolbox','vision','visiondata','stopSigns'),'FileExtensions','.jpg');
blds = load(fullfile(matlabroot,'toolbox','vision','visiondata','stopSigns','stopSigns.mat'));
% 创建数据存储
imds = combine(imds, table(blds.stopSigns.Location));
定义网络架构
matlab
深色版本
% 使用预训练的 Faster R-CNN 模型
net = fasterRcnnObjectDetector(resnet50, {'StopSign'}, 'InputSize', [224 224 3]);
设置训练选项
matlab
深色版本
options = trainingOptions('sgdm', ...
'MaxEpochs', 10, ...
'MiniBatchSize', 4, ...
'InitialLearnRate', 0.001, ...
'Shuffle', 'every-epoch', ...
'Verbose', false, ...
'Plots', 'training-progress');
训练模型
matlab
深色版本
net = trainFasterRCNNObjectDetector(imds, net, options);
评估模型
matlab
深色版本
% 测试图像
testImage = imread(fullfile(matlabroot,'toolbox','vision','visiondata','stopSigns','stopSign_01.jpg'));
% 进行目标检测
[bboxes, scores, labels] = detect(net, testImage);
% 显示结果
imshow(testImage);
hold on;
for i = 1:length(bboxes)
rectangle('Position', bboxes(i,:), 'LineWidth', 2, 'EdgeColor', 'g');
text(bboxes(i,1), bboxes(i,2)-10, labels{i}, 'Color', 'g', 'FontSize', 14);
end
hold off;
3. 语义分割
数据准备
matlab
深色版本
% 加载内置数据集
imds = imageDatastore(fullfile(matlabroot,'toolbox','vision','visiondata','roadSegmentation','TrainingImages'),'FileExtensions','.png');
pxds = pixelLabelDatastore(fullfile(matlabroot,'toolbox','vision','visiondata','roadSegmentation','TrainingPixelLabels'), ...
{'Car', 'Road', 'Sky', 'Background'});
% 创建数据存储
ds = combine(imds, pxds);
定义网络架构
matlab
深色版本
% 使用预训练的 SegNet 模型
net = segnetLayers('resnet18', {'Car', 'Road', 'Sky', 'Background'});
设置训练选项
matlab
深色版本
options = trainingOptions('sgdm', ...
'MaxEpochs', 10, ...
'MiniBatchSize', 4, ...
'InitialLearnRate', 0.001, ...
'Shuffle', 'every-epoch', ...
'Verbose', false, ...
'Plots', 'training-progress');
训练模型
matlab
深色版本
net = trainNetwork(ds, net, options);
评估模型
matlab
深色版本
% 测试图像
testImage = imread(fullfile(matlabroot,'toolbox','vision','visiondata','roadSegmentation','TestingImages','test1.png'));
% 进行语义分割
pixelLabels = semanticseg(testImage, net);
% 显示结果
figure;
imshow(pixelLabels);
4. 时间序列预测
数据准备
matlab
深色版本
% 假设我们已经有一个时间序列数据集
X = rand(10, 1000); % 10 个特征,1000 个时间点
Y = rand(1, 1000); % 目标变量
% 划分训练集和测试集
trainIdx = randperm(1000, 800);
testIdx = setdiff(1:1000, trainIdx);
XTrain = X(:, trainIdx);
YTrain = Y(trainIdx);
XTest = X(:, testIdx);
YTest = Y(testIdx);
定义网络架构
matlab
深色版本
layers = [
sequenceInputLayer(10)
lstmLayer(100)
fullyConnectedLayer(1)
regressionLayer
];
设置训练选项
matlab
深色版本
options = trainingOptions('adam', ...
'MaxEpochs', 10, ...
'MiniBatchSize', 256, ...
'SequenceLength', 'longest', ...
'Shuffle', 'never', ...
'Plots', 'training-progress', ...
'Verbose', false);
训练模型
matlab
深色版本
net = trainNetwork(XTrain, YTrain, layers, options);
评估模型
matlab
深色版本
YPred = predict(net, XTest);
YTrue = YTest;
% 计算均方误差
mse = mean((YPred - YTrue).^2);
fprintf('Mean Squared Error: %.4f\n', mse);
总结
通过以上示例,你应该能够在 MATLAB 中进行多种类型的深度学习任务。MATLAB 提供了丰富的工具和函数,使得深度学习任务变得更加简单和高效