Matlab2017b中增加了神经网络工具箱Neural Network Toolbox,许多深度学习网络用一两个命令就可以实现,大大简化了程序实现工作。

1. 使用trainNetwork训练CNN并分类

    %exam1.m
    load digitTrainSet;
    %创建CNN网络
    layers = [imageInputLayer([28 28 1],'Normalization','none');
                        convolution2dLayer(5,20);
                        reluLayer();
                        maxPooling2dLayer(2,'Stride',2);
                        convolution2dLayer(5,16);
                        reluLayer();
                        maxPooling2dLayer(2,'Stride',2);
                        fullyConnectedLayer(256);
                        reluLayer();
                        fullyConnectedLayer(10);
                        softmaxLayer();
                        classificationLayer()];
    %设置网络训练方式
    opts = trainingOptions('sgdm');
    %训练网络
    net = trainNetwork(XTrain,TTrain,layers,opts);
    load digitTestSet;
    %对测试数据进行分类
    [YTest,scores] = classify(net,XTest);
    accuracy = sum(YTest == TTest)/numel(TTest);

该示例使用trainNetwork训练CNN网络,该函数用法为:

trainedNet = trainNetwork(X,Y,layers,options)

X为输入数据,Y为类别标记,categorical类型。

2.使用trainAutoencoder训练自编码器

    %exam2.m
    [X,T] = wine_dataset;
    hiddenSize = 10;
    %训练第一层自编码器
    autoenc1 = trainAutoencoder(X,hiddenSize,...
            'L2WeightRegularization',0.001,...
            'SparsityRegularization',4,...
            'SparsityProportion',0.05,...
            'DecoderTransferFunction','purelin');
    %使用自编码器对输入数据进行编码
    features1 = encode(autoenc1,X);
    hiddenSize = 10;
    %对第一层编码器输出再训练自编码器
    autoenc2 = trainAutoencoder(features1,hiddenSize,...
            'L2WeightRegularization',0.001,...
            'SparsityRegularization',4,...
            'SparsityProportion',0.05,...
            'DecoderTransferFunction','purelin',...
            'ScaleData',false);
    %对第一层编码器输出进行编码
    features2 = encode(autoenc2,features1);
    %对第二层编码器输出训练Softmax层
    softnet = trainSoftmaxLayer(features2,T,'LossFunction','crossentropy');
    %构建深度网络
    deepnet = stack(autoenc1,autoenc2,softnet);
    %训练深度网络
    deepnet = train(deepnet,X,T);
    %使用训练出的网络计算输入数据属于各类别的概率类型
    wine_type = deepnet(X);
    plotconfusion(T,wine_type);

trainAutoencoder的用法为:

autoenc = trainAutoencoder(X,hiddenSize)

hiddensize表示隐含层大小,返回值autoenc是类型为Autoencoder的超类。其属性值如下图所示:

3. 使用patternnet函数

    %exam3.m
    clear;
    [x,t] = iris_dataset;
    %创建模式识别网络
    net = patternnet(1000);
    %训练网络
    net = train(net,x,t);
    %显示网络结构
    view(net)
    %计算x属于各类的概率
    y = net(x);
    %计算网络性能
    perf = perform(net,t,y);
    %得出类别标签
    classes = vec2ind(y);

patternnet是神经网络工具箱的自带函数,用于创建模式识别网络,用法为:

patternnet(hiddenSizes,trainFcn,performFcn)

trainFcn表示训练函数,默认值为‘trainscg’,performFcn表示损失函数,默认值为‘crossentropy’。