目录

1 APP的使用

(1)打开方式一
从Matlab工具栏APP处搜索Deep Network Designer点击打开,或者在命令行窗口输入命令:deepNetworkDesigner开启
image.png
(2)新建神经网络结构
拖动左侧的图标到中心工作区,然后点击连接图标
2020-10-29_21-23.png
(3)使用现成的神经网络
举例使用alexnet,在窗口输入alexnet,提示没有安装的话,就点击红色中的附加资源管理器,点击安装就行。安装完成后,再次输入alexnet即可。然后再APP中点击导入,就会提示导入alexnet网络。
截屏2020-10-29 下午7.57.26.png
(4)检查网络结构是否正确
点击工具栏的分析,可以查看网络的结构,如果结构不对,会报错并红色的提示。
2020-10-29_19-57.png
(5)生成代码代码
点击导出,选择导出生成代码。把layers的代码拷贝出来,这就是你网络结构的代码。
2020-10-29_19-54.png
会生成实时脚本文件,layers就是我们搭建的神经网络,单独拷贝出来使用。
2020-10-29_19-55.png

2 使用神经网络

2.1 简单例子

  1. % 一个使用APPDemo
  2. % 加载数据集
  3. digitDatasetPath = fullfile(matlabroot,'toolbox','nnet', ...
  4. 'nndemos','nndatasets','DigitDataset');
  5. imds = imageDatastore(digitDatasetPath, ...
  6. 'IncludeSubfolders',true, ...
  7. 'LabelSource','foldernames');
  8. % 展示数据集
  9. figure
  10. numImages = 10000;
  11. perm = randperm(numImages,20);
  12. for i = 1:20
  13. subplot(4,5,i);
  14. imshow(imds.Files{perm(i)});
  15. end
  16. % 划分数据集和测试集出来
  17. numTrainingFiles = 750;
  18. [imdsTrain,imdsTest] = splitEachLabel(imds,numTrainingFiles,'randomize');
  19. % 使用搭建的神经网络
  20. layers = [ ...
  21. imageInputLayer([28 28 1])
  22. convolution2dLayer(5,20)
  23. reluLayer
  24. maxPooling2dLayer(2,'Stride',2)
  25. fullyConnectedLayer(10)
  26. softmaxLayer
  27. classificationLayer];
  28. % 配置训练参数
  29. options = trainingOptions('sgdm', ...
  30. 'MaxEpochs',20,...
  31. 'InitialLearnRate',1e-4, ...
  32. 'Verbose',false, ...
  33. 'Plots','training-progress');
  34. % 训练神经网络
  35. net = trainNetwork(imdsTrain,layers,options);
  36. % 使用神经网络,这是分类的例子。使用classify.搭配神经网络中的最后一层classificationLayer
  37. % 如果是回归的神经网络,则神经网络的最后一层是regressionLayer,搭配predict使用,就是替换classifypredict
  38. YPred = classify(net,imdsTest);
  39. YTest = imdsTest.Labels;
  40. accuracy = sum(YPred == YTest)/numel(YTest)

2.2 trainOptions

官方文档讲解:https://www.mathworks.com/help/deeplearning/ref/trainingoptions.html
根据自己的训练需要,只选择需要的参数设定即可,不设定的就是执行默认值

options = 
  TrainingOptionsSGDM with properties:

                    Momentum: 0.9000
            InitialLearnRate: 0.0100      % 初始学习率
           LearnRateSchedule: 'piecewise' % 学习率周期
         LearnRateDropFactor: 0.2000            % 学习率下降因子
         LearnRateDropPeriod: 5                        % 学习率下降周期
            L2Regularization: 1.0000e-04    % L2正则化参数
     GradientThresholdMethod: 'l2norm'        
           GradientThreshold: Inf                    % 梯度阈值
                   MaxEpochs: 20                    % 最大epochs
               MiniBatchSize: 64                    % 最小batch大小
                     Verbose: 1                        % 是否窗口打印训练进度
            VerboseFrequency: 50
              ValidationData: []                    % 放入验证集数据和验证集标签
         ValidationFrequency: 50                    % 验证频率
          ValidationPatience: Inf
                     Shuffle: 'once'            % 打乱训练集的次数
              CheckpointPath: ''    
        ExecutionEnvironment: 'auto'            % 设置CPU或者GPU执行
                  WorkerLoad: []
                   OutputFcn: []
                       Plots: 'training-progress' % 是否显示训练可视化的过程图
              SequenceLength: 'longest'
        SequencePaddingValue: 0
    SequencePaddingDirection: 'right'
        DispatchInBackground: 0
     ResetInputNormalization: 1

2.3 trainNetwork

官方文档讲解:https://www.mathworks.com/help/deeplearning/ref/trainnetwork.html
简单的使用格式如下,其他格式参考官方文档讲解

net = trainNetwork(X,Y,layers,options)
% X是训练集的数据集,Y是训练集的标签集

2.4 predict和classify

这两个函数是用来调用神经网络模型的,用测试集去测试输出结果。predict函数搭配回归神经网络使用,就是神经网络的最后一层是regressionLayer,如2.1例子中42行就是替换classify为predict。classify函数搭配分类神经网络,就是神经网络中的最后一层是classificationLayer。

result = classify(net,testData)
% 第一个参数是训练的网络模型
% 第二个参数是测试的数据
% result表示用神经网络处理TestData最终的输出结果

3 参数选择原则

(1)首先开发一个过拟合的模型

  • 添加更多的层
  • 让每一层变得更大
  • 训练更多的轮次

(2)然后抑制过拟合

  • dropout
  • 正则化
  • 图像增强

(3)再次调节超参数

  • 学习速率
  • 隐藏层单元数
  • 训练轮次

超参数的选择是一个经验不断测试的结果,经典机器学习的方法,如特征工程、增加训练数据要做交叉验证。

4 构建网络的总原则

  • 增大网络容量,直到过拟合
  • 采取措施抑制过拟合
  • 继续增大网络容量,直到过拟合