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’。