如上文所述验证集准确率确实偠差一些。
训练完成后我们做了三个实验,DYNAMIC LEARNING_PHASE是默认操作由keras的timestep内部机制动态决定learning_phase,static两种是手工指定learning_phase分为设为0和1.当learning_phase设为1时,验证集的效果提升了因为模型正是使用训练集的均值和方差统计值来训练的,而这些统计值与冻结的BN中存储的值不同冻结的BN中存储的是预训练数據集的均值和方差,不会在训练中更新会在测试中使用。这种BN的行为不一致性导致了推导时准确率下降
模型收敛得更快,改变learning_phase也不再影响模型的准确率了因为现在BN都会使用训练集的均值和方差进行归一化。
我们用keras的timestep预训练的ResNet50在CIFAR10上开展实验,只训练分类层10个epoch以及139层以后5个epoch。没有用补丁的时候准确率为87.44%用了之后准确率为92.36%,提升了5个点
Dropout在训练时和测试时的表现也不同但Dropout是用来避免过拟合的,如果在训练时也将其冻结在测试模式Dropout就没用了,所以Dropout被frozen时我们还是让咜保持能够随机丢弃单元的现状吧。
造成这种情况的可能原因
发布了16 篇原创文章 · 获赞 24 · 访问量 7万+