在Matlab中实现一个人工神经网络(Artificial Neural Network, ANN)通常涉及定义网络结构、准备数据、设置训练选项,以及进行训练和测试。以下是一个简单的例子,使用Matlab的Deep Learning Toolbox来创建一个前馈神经网络(Feedforward Neural Network),用于分类任务。这里我们使用随机生成的数据作为示例。
步骤 1: 准备数据
| % 生成随机输入特征 |
| rng(1); % 为了结果的可重复性 |
| numInputs = 100; % 样本数量 |
| numFeatures = 10; % 特征数量 |
| X = rand(numInputs, numFeatures); |
| |
| % 创建标签 |
| % 假设我们有两个类别,通过输入特征的某种规则来分配标签 |
| labels = arrayfun(@(i) mod(sum(X(i,:)), 2), 1:numInputs); |
| labels = categorical(labels); % 转换为categorical类型,适合分类问题 |
| |
| % 划分训练集和测试集 |
| cv = cvpartition(numInputs, 'HoldOut', 0.2); |
| idxTrain = training(cv); |
| idxTest = test(cv); |
| |
| XTrain = X(idxTrain, :); |
| YTrain = labels(idxTrain); |
| XTest = X(idxTest, :); |
| YTest = labels(idxTest); |
步骤 2: 创建神经网络
接下来,我们使用patternnet
函数(尽管它在新版本中可能不是首选,但这里为了简单起见使用它)来创建一个神经网络。在较新的版本中,可能更倾向于使用layerGraph
来定义自定义网络结构。
| % 创建一个简单的神经网络 |
| hiddenLayerSize = 10; % 隐藏层神经元数量 |
| net = patternnet(hiddenLayerSize); |
| |
| % 查看网络结构 |
| view(net); |
注意:patternnet
函数在新版本的Matlab中可能不再推荐使用,建议使用layerGraph
结合fullyConnectedLayer
、reluLayer
等自定义网络层。
步骤 3: 设置训练选项
| % 设置训练选项 |
| options = trainingOptions('sgdm', ... |
| 'MaxEpochs', 100, ... |
| 'ValidationData', {XTest, YTest}, ... |
| 'ValidationFrequency', 30, ... |
| 'Verbose', true, ... |
| 'Plots', 'training-progress'); |
步骤 4: 训练网络
| % 训练网络 |
| [net, tr] = train(net, XTrain, YTrain, options); |
步骤 5: 测试网络
| % 使用测试集评估网络性能 |
| YPred = classify(net, XTest); |
| |
| % 计算准确率 |
| accuracy = sum(strcmp(YPred, YTest)) / numel(YTest); |
| disp(['Accuracy: ', num2str(accuracy)]); |