文章目录
前言
以下是 MATLAB 神经网络工具箱的入门教程,涵盖基本概念、操作流程和实例,帮助你快速上手。
1. 工具箱概述
MATLAB 神经网络工具箱提供了丰富的函数和工具,用于设计、训练和部署各类神经网络,支持:
- 网络类型:前馈网络、递归网络、卷积网络、自编码器等。
- 学习算法:梯度下降、Levenberg-Marquardt、遗传算法等。
- 应用场景:分类、回归、预测、聚类、图像处理等。
2. 基本操作流程
- 步骤 1:准备数据
导入数据(如 CSV、Excel 或 MAT 文件)。
划分训练集、验证集和测试集。
数据预处理(归一化、标准化等)。
% 示例:加载鸢尾花数据集
load fisheriris
X = meas'; % 特征矩阵 (4x150)
T = dummyvar(categorical(species))'; % 目标矩阵 (3x150)
% 划分数据集
trainInd = 1:30:150; % 训练集索引
valInd = 2:30:150; % 验证集索引
testInd = 3:30:150; % 测试集索引
% 创建数据划分
net.divideFcn = 'divideind';
net.divideParam.trainInd = trainInd;
net.divideParam.valInd = valInd;
net.divideParam.testInd = testInd;
- 步骤 2:创建神经网络
使用 feedforwardnet、patternnet 或 newff 等函数创建网络。
% 创建前馈神经网络(2层,隐含层10个神经元)
net = feedforwardnet(10); % 回归问题
% 或用于分类:
net = patternnet(10);
% 设置训练参数
net.trainFcn = 'trainlm'; % Levenberg-Marquardt算法
net.performFcn = 'crossentropy'; % 分类问题用交叉熵
net.plotFcns = {'plotperform', 'plottrainstate', 'ploterrhist'};
- 步骤 3:训练网络
使用 train 函数训练网络,并通过验证集防止过拟合。
% 训练网络
[net, tr] = train(net, X, T);
% 查看训练结果
plotperform(tr) % 绘制性能曲线
- 步骤 4:评估网络
使用测试集评估网络性能,计算准确率或误差。
% 预测测试集
Y = net(X); % 输出结果
% 计算分类准确率
[~, predicted] = max(Y);
[~, actual] = max(T);
accuracy = mean(predicted == actual);
fprintf('分类准确率: %.2f%%\n', accuracy*100);
- 步骤 5:使用网络进行预测
将训练好的网络应用于新数据。
% 预测新样本
newX = [5.1, 3.5, 1.4, 0.2]'; % 新样本特征
newY = net(newX); % 预测结果
3. 常见网络类型与应用
- (1) 前馈神经网络(用于分类 / 回归)
% 创建并训练前馈网络(回归问题)
net = feedforwardnet(10); % 10个隐含层神经元
net = train(net, inputs, targets);
outputs = net(inputs);
- (2) 卷积神经网络(用于图像识别)
% 使用预训练的CNN模型(如AlexNet)
net = alexnet;
% 替换最后几层以适应自定义数据集
layers = net.Layers;
layers(end-2:end) = [
fullyConnectedLayer(2)
softmaxLayer
classificationLayer
];
% 训练模型
options = trainingOptions('sgdm', ...
'MaxEpochs', 10, ...
'ValidationData', valData, ...
'ValidationFrequency', 30, ...
'Verbose', false, ...
'Plots', 'training-progress');
net = trainNetwork(trainData, layers, options);
- (3) 循环神经网络(用于序列预测)
% 创建LSTM网络(时间序列预测)
layers = [
sequenceInputLayer(1)
lstmLayer(20)
fullyConnectedLayer(1)
regressionLayer
];
options = trainingOptions('adam', ...
'MaxEpochs', 50, ...
'SequenceLength', 'longest', ...
'Shuffle', 'every-epoch', ...
'Verbose', false, ...
'Plots', 'training-progress');
net = trainNetwork(XTrain, YTrain, layers, options);
4. 数据预处理技巧
归一化:将数据缩放到 [0,1] 或 [-1,1] 区间。
[X_norm, ps] = mapminmax(X); % 归一化
X_original = mapminmax('reverse', X_norm, ps); % 反归一化
标准化:使数据均值为 0,标准差为 1。
matlab
[X_std, mu, sigma] = zscore(X); % 标准化
5. 高级功能
(1) 自定义网络架构
% 创建自定义网络
layers = [
inputLayer(4)
fullyConnectedLayer(10, 'Name', 'fc1')
reluLayer('Name', 'relu1')
fullyConnectedLayer(3, 'Name', 'fc2')
softmaxLayer
classificationLayer
];
(2) 保存与加载模型
% 保存模型
save('myNeuralNetwork.mat', 'net');
% 加载模型
load('myNeuralNetwork.mat');
(3) 参数调优
使用 trainbr(贝叶斯正则化)或 trainrp(弹性反向传播)防止过拟合。
net.trainFcn = 'trainbr'; % 贝叶斯正则化
6. 可视化工具
网络结构可视化:
view(net) % 显示网络拓扑结构
权重与偏置可视化:
plotweights(net) % 绘制权重
plotbiases(net) % 绘制偏置