深度学习训练中断后继续训练时,loss变大,精度下降,随机种子不变。有什么原因会导致这种情况?
可能先要搞清楚,loss变大,是否真的跟“训练中断”有关系。有下面两种可能:
1)如果代码没有问题,中断之前的learning rate应该与继续训练开始时是一样的。这种情况,有没有中断,应该没有影响。loss变大的原因,可能是此时的learning rate太大了,需要变小一些。
2)如果你有使用learning rate decay之类的方法,比如tensorflow里面的tf.train.exponential_decay, 计算learning rate的时候,有一个global_step。中断后继续训练,计算global_step也需要考虑中断之前的step数,检查下计算global_step的逻辑是否正确。
3) 也有可能是训练数据划分的不是很“均匀”。如果mini batch之间的分布差异比较大,即使没有中断,训练过程中也会出现loss变大的情况。
理解全连接层
全连接层实际就是卷积核大小为上层特征大小的卷积运算,卷积后的结果为一个节点,就对应全连接层的一个点。
假设最后一个卷积层的输出为7×7×512,连接此卷积层的全连接层为1×1×4096。如果将这个全连接层转化为卷积层:
1)共有4096组滤波器;
2)每组滤波器含有512个卷积核;
3)每个卷积核的大小为7×7;
4)则输出为1×1×4096;
由于每个滤波核的大小和上一层的feature map大小一样,保证了转换后的卷积层的运算结果和全连接层是一样的。
若后面再连接一个1×1×4096全连接层。则其对应的转换后的卷积层的参数为:
1)共有4096组滤波器;
2)每组滤波器含有4096个卷积核;
3)每个卷积核的大小为1×14.则输出为1×1×4096;
全连接层的坏处就在于其会破坏图像的空间结构,因此人们便开始用卷积层来“代替”全连接层,通常采用1×1的卷积核,这种不包含全连接的CNN成为全卷积神经网络(FCN)。
FCN最初是用于图像分割任务,之后开始在计算机视觉领域的各种问题上得到应用,事实上,Faster R-CNN中用来生成候选窗口的CNN就是一个FCN。
FCN的特点就在于输入和输出都是二维的图像,并且输入和输出具有相对应的空间结构,在这种情况下,我们可以将FCN的输出看作是一张热度图,用热度来指示待检测的目标的位置和覆盖的区域。在目标所处的区域内显示较高的热度,而在背景区域显示较低的热度,这也可以看成是对图像上的每一个像素点都进行了分类,这个点是否位于待检测的目标上。