全文共 2174字,预计学习时长 4分钟
本文作者将用实际的案例,带你深入探究CNN初始化。
图片来源:Unsplash/@ Nino Yang
上周,我用在CIFAR10数据集上训练的VGG16模型进行了一些实验。由于模型需要从头开始训练,所以我并未采用ImageNet的预训练模型。
我设置了训练50个epoch,然后去喝了杯咖啡。回来之后,却发现学习曲线变成了这样:
这个模型没有学到任何东西!
我见过收敛得很慢的网络,也见过振荡、过度拟合、发散的网络,但像这种什么也没有学到的模型还是头一次见。于是,我深入研究了一下其中的原因。
实验
建立模型时,我遵循了原始的VGG16结构,但移除了大多数完全连接的层,因此几乎只剩下卷积层。
要找到上述训练曲线出现的原因,还需要知道:当模型学习不佳时,往往可以从梯度找到原因。以下方法可以得到每层的平均值和标准偏差:
转换为图表如下: