在卷积神经网络中传递学习的性能更差

问题描述:

我在MatConvNet中用卷积神经网络进行情绪识别。我有一个主要的大数据集(A有40.000图片)和两个较硬的,较小的数据集(B,C有5.000图片)和相同的类。当我使用随机权重初始化在数据集A上运行网络时,我的准确性达到了70%。在卷积神经网络中传递学习的性能更差

因此,我想通过在同一网络架构上预先训练数据集B和C上的权重来提高性能。当我在数据集A上调整网络时,我只从预训练网络获取三个初始图层(conv,relu,pool)。但是,我得到的结果比随机权重要低。我也尝试了所有的图层,六个第一层和一个第一层。

我的理解和实施的权利?而不是前三层中的随机权重(实际上只是第一个 - conv),我使用预训练网络中的那些。现在我不确定我是否理解这个概念。

我用下面的微调代码:

net = load('net-epoch-100.mat'); 
trainOpts.learningRate = [0.004*ones(1,25), 0.002*ones(1,25), 
0.001*ones(1,25), 0.0005*ones(1,25)]; %I set much higher training rate 
             %for pretraining on datasets B and C 
net.layers=net.layers(1:end-13);  %only taking first three layers from pretrained net 
... the rest of the layers 

“的数据集A.微调我的网络时,我只需要从预训练网络三个初始层(转化,RELU,池)”

由于relu和池不可训练,所以基本上只使用了预训练网络中的一层。第一个conv层只是做了一些边缘检测,并没有捕获任何高级视觉概念。 转移学习的最佳实践是使用来自高层的ImageNet预训练功能。您可以先在大数据集上对其进行微调,然后在小数据集上对其进行微调。

+0

感谢您的答案@DataHungry。我也试图用3个conv层做同样的事情,但结果也更糟糕。按照您的建议,我会尝试使用ImageNet。你知道我如何在Matlab中实现“从高级预训练特征”?我加载预训练的网络,从它的几个第一层,然后我跟着我自己的层? – Nicole

+0

@Nicole你应该保留预训练网络的大部分层次,不仅仅是第一个。我建议你:(1)加载预训练网络。 (2)删除最后几个图层。 (3)附上几层以适应您的问题 – DataHungry

+0

好的,谢谢指导!我会试试看。 – Nicole