现在,大家都意识到深度神经网络在图像特征提取方面具有很强的能力,尽管其解释性不强,尽管人们对它的内部原理不十分清楚。那么能不能取出网络中某层数据作为图像特征而进行自己定制的其它处理呢?答案当然是肯定的。在Matlab2017b中,从网络取数据主要有两种方法。一是使用Neural Network Toolbox的activations函数,一是导入网络后直接使用网络某层的名字。
1.使用activations函数
%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');
%训练CNN网络
net = trainNetwork(XTrain,TTrain,layers,opts);
%提取输入X的第6层输出数据
trainFeatures = acti