1

您好,我最近开始研究 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 在此处输入图像描述

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

在此处输入图像描述

任何人请帮我告诉哪些学习是好的,这些图表显示了什么?

更新: 我做错了。由于cnn_trainMatConvNet 中的函数默认为“多类”,所以我将其更改为“二进制”现在我通过不同学习率的组合得到了这个结果[0.00005*ones(1,10) 0.000005*ones(1,20) 0.0000005*ones(1,20)]在此处输入图像描述

4

0 回答 0