使用CNN输出二进制分类

时间:2017-01-21 00:28:10

标签: machine-learning computer-vision deep-learning conv-neural-network matconvnet

你好我最近开始在CNN上进行二进制分类。

这是我的网络:

net.meta.inputSize = [28 28 3] ;
net.meta.trainOpts.learningRate = 1e-02 ;
net.meta.trainOpts.numEpochs = 50 ;
net.meta.trainOpts.batchSize = 280 ;
opts.train.gpus = [];
f=1/100 ;
net.layers = {} ;
net.layers{end+1} = struct('type', 'conv','weights', {{f*randn(5,5,3,50, 'single'), zeros(1, 50, 'single')}},'stride', 1,'pad', 0);
net.layers{end+1} = struct('type', 'pool','method', 'max', 'pool', [2 2], 'stride', 2, 'pad', 0) ;
net.layers{end+1} = struct('type', 'conv', 'weights', {{f*randn(5,5,50,30, 'single'),zeros(1,30,'single')}}, 'stride', 1, 'pad', 0) ;
net.layers{end+1} = struct('type', 'pool', 'method', 'max', 'pool', [2 2], 'stride', 2, 'pad', 0) ;
net.layers{end+1} = struct('type', 'conv', 'weights', {{f*randn(4,4,30,50, 'single'),  zeros(1,50,'single')}}, 'stride', 1, 'pad', 0) ;
net.layers{end+1} = struct('type', 'relu') ;
net.layers{end+1} = struct('type', 'conv', 'weights', {{f*randn(1,1,50,2, 'single'), zeros(1,2,'single')}}, 'stride', 1, 'pad', 0) ;
net.layers{end+1}= struct('type', 'dropout', 'rate', 0.9);
net.layers{end+1} = struct('type', 'softmaxloss') ;
 net.meta.classes.name =arrayfun(@(x)sprintf('%d',x),0:1,'UniformOutput',false);
disp( 'Net is Ok.' );

[net, info] = cnn_train( net, imdb, @getBatch, net.meta.trainOpts, opts.train, 'val', find( imdb.images.set == 2 ) ) ;

如果学习率为1e-2,我会在结尾处获得此输出 enter image description here

如果显着减少学习,我会得到这个输出

enter image description here

任何人都可以帮我告诉哪些学习成绩好,这些图表显示了什么?

更新 我做得有点不对劲。由于MatConvNet中的cnn_train函数是'多类'默认情况下,我已将其更改为“二进制”'现在我得到了这个结果,结合了不同的学习率[0.00005*ones(1,10) 0.000005*ones(1,20) 0.0000005*ones(1,20)]enter image description here

0 个答案:

没有答案