MATLAB 的神经网络工具箱

好的,我将继续介绍 MATLAB 的神经网络工具箱,包括更多高级功能、实际应用案例和函数详解。

一、高级网络架构

1. 深度学习网络

使用 Deep Learning Toolbox 可以构建更复杂的深度学习模型,如:

% 创建简单的卷积神经网络 (CNN)
layers = [
    imageInputLayer([28 28 1])  % 输入层:28×28像素的灰度图像
    
    convolution2dLayer(5, 20)   % 卷积层:5×5卷积核,20个滤波器
    reluLayer                   % ReLU激活函数
    maxPooling2dLayer(2, 'Stride', 2)  % 最大池化层
    
    fullyConnectedLayer(10)     % 全连接输出层:10个类别
    softmaxLayer                % Softmax激活函数
    classificationLayer];       % 分类层

% 设置训练选项
options = trainingOptions('sgdm', ...
    'MaxEpochs', 10, ...
    'MiniBatchSize', 128, ...
    'ValidationData', valData, ...
    'ValidationFrequency', 30, ...
    'Verbose', false, ...
    'Plots', 'training-progress');

% 训练网络
net = trainNetwork(trainData, layers, options);

2. 循环神经网络 (RNN)

用于处理序列数据(如时间序列、文本):

% 创建 LSTM 网络用于时间序列预测
layers = [
    sequenceInputLayer(1)      % 序列输入层
    
    lstmLayer(100)             % LSTM层:100个隐藏单元
    dropoutLayer(0.2)          % Dropout层防止过拟合
    
    fullyConnectedLayer(1)     % 全连接输出层
    regressionLayer];          % 回归层

% 训练网络
net = trainNetwork(XTrain, YTrain, layers, options);

二、实际应用案例

1. 图像分类

使用预训练网络进行图像分类:

% 加载预训练的 ResNet-18 网络
net = resnet18;

% 准备自定义图像数据
imageDir = fullfile('path_to_images');
imds = imageDatastore(imageDir, 'IncludeSubfolders', true, 'LabelSource', 'foldernames');

% 微调网络
lgraph = layerGraph(net);
lgraph = replaceLayer(lgraph, 'fc1000', fullyConnectedLayer(numClasses, 'Name', 'fc'));
lgraph = replaceLayer(lgraph, 'prob', classificationLayer('Name', 'classoutput'));

% 训练网络
net = trainNetwork(imds, lgraph, options);

2. 回归预测

预测非线性函数:

% 生成数据
x = linspace(-2*pi, 2*pi, 1000)';
y = sin(x) + 0.2*randn(size(x));

% 创建和训练网络
net = fitnet(10);  % 10个隐藏神经元的前馈网络
net = train(net, x, y);

% 预测并绘图
y_pred = net(x);
plot(x, y, 'b.', x, y_pred, 'r-');
legend('实际数据', '预测结果');

三、关键函数详解

1. 数据处理函数

  • mapminmax:将数据归一化到 [-1,1] 范围
  • featureNormalize:标准化特征(均值为0,标准差为1)
  • dividerand:随机划分数据集为训练/验证/测试集
% 数据归一化示例
[x_norm, ps] = mapminmax(x);  % ps 保存归一化参数
x_original = mapminmax('reverse', x_norm, ps);  % 反归一化

2. 训练函数

函数名 算法类型 适用场景
trainlm Levenberg-Marquardt 中小型网络,收敛快
trainbfg BFGS拟牛顿法 内存有限时使用
trainscg 量化共轭梯度法 大型网络,内存效率高
trainrbf 径向基函数训练 函数逼近、模式识别

3. 性能评估函数

  • mse:均方误差(回归问题)
  • mae:平均绝对误差
  • confusionmat:混淆矩阵(分类问题)
  • perfcurve:ROC曲线
% 计算分类准确率
cm = confusionmat(targets, outputs);
accuracy = sum(diag(cm))/sum(cm(:));

四、网络可视化与分析

1. 可视化工具

  • view(net):显示网络拓扑结构
  • plotconfusion:绘制混淆矩阵
  • plotroc:绘制ROC曲线
  • plotweights:绘制权值分布
% 绘制混淆矩阵
plotconfusion(targets, outputs);

2. 网络分析

  • sim(net, x):仿真网络输出
  • net.layers:查看网络层信息
  • net.IWnet.LW:查看输入层和层间权值
  • net.b:查看偏置值

五、Tips & Tricks

1. 避免过拟合

  • 早停法(Early Stopping):使用验证集监控性能
  • Dropout 层:随机忽略部分神经元
  • 正则化:在训练选项中设置 L2Regularization

2. GPU 加速

% 将数据和网络移至 GPU
gpuDevice;  % 检查GPU是否可用
x_gpu = gpuArray(x);
t_gpu = gpuArray(t);
net = train(net, x_gpu, t_gpu);

3. 模型保存与加载

% 保存网络
save('my_neural_network.mat', 'net');

% 加载网络
load('my_neural_network.mat');
y = net(x);

MATLAB 的神经网络工具箱提供了从基础网络到深度学习的全方位支持,结合其直观的界面和丰富的可视化功能,使得神经网络的设计、训练和部署变得高效而简单。无论是学术研究还是工业应用,MATLAB 都是构建神经网络模型的强大工具。

posted @ 2025-05-15 10:50  小元技能  阅读(495)  评论(0)    收藏  举报