MATLAB的神经网络工具箱教程

文章目录


前言

以下是 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)   % 绘制偏置
本文是转载文章,点击查看原文
如有侵权,请联系 lx@jishuguiji.net 删除。