我正在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 上微调我的网络时,我只从预训练网络中获取三个初始层(conv,relu,pool(。
由于 relu 和 pool 不可训练,你基本上只使用了预训练网络中的一个层。第一个卷积层只执行一些边缘检测,不会捕获任何高级视觉概念。迁移学习的最佳实践是使用来自高层的 ImageNet 预训练特征。您可以先在大型数据集上对其进行微调,然后在小型数据集上对其进行微调。