我读了很多关于卷积神经网络的论文,但有一件事我不太明白,卷积层中的滤波器是如何初始化的?
因为例如在第一层,滤波器应该检测边缘等等。
但如果是随机初始化的话,它可能不太准确?下一层和高级特征也是一样。
另外一个问题是,这些滤波器的值的范围是什么?
非常感谢你!
http://deeplearning.net/tutorial/lenet.html:
请注意,随机初始化的滤波器非常类似于边缘检测器!请注意,我们使用与MLP相同的权重初始化公式。权重从均匀分布中随机抽样,在范围[-1/fan-in, 1/fan-in]内,其中fan-in是隐藏单元的输入数量。对于MLP,这是下一层中单元的数量。对于CNNs,我们必须考虑输入特征映射的数量和感受野的大小。实际上,很少有人从头开始训练一个完整的卷积网络(使用随机初始化),因为很少有足够大的数据集。相反,通常会在非常大的数据集(例如ImageNet,其中包含120万张带有1000个类别的图像)上预先训练ConvNet,然后将ConvNet用作感兴趣任务的初始化或固定特征提取器。三种主要的转移学习场景如下:
预训练模型。由于现代ConvNets需要在ImageNet上跨多个GPU进行2-3周的训练,因此常见做法是看到人们发布最终的ConvNet检查点,以使其他人可以将网络用于微调。例如,Caffe库具有一个{{link1:模型动物园},人们在其中分享他们的网络权重。
何时以及如何微调?您如何决定在新数据集上执行哪种类型的迁移学习?这是几个因素的函数,但最重要的两个因素是新数据集的大小(小或大)以及其与原始数据集的相似性(例如,图像和类别的内容是否类似于ImageNet或非常不同,例如显微镜图像)。请记住,ConvNet特征在早期层中更通用,在后来的层中更具有原始数据集的特异性。以下是导航4个主要场景的一些常见经验法则: