NASNet-A微调时验证精度表现差

4
我有一个数据集,大约包含34000张图像,分为两组:训练集(30000张图像)和验证集(4000张图像)。每个图像是从视频中获取的两个图像之间的差异结果(每对图像之间的时间偏移量约为1秒)。视频具有静态背景,因此差异图像包含太多黑色,只有一两个小区域带有颜色。每个差异图像都有一个标签(是否发生了某种动作,即1或0),因此这是一种二元分类。简而言之,我正在使用在ImageNet上预训练的slim模型,在我的数据集上进行微调。我启动了5个独立的训练,使用5个不同的网络:InceptionV4,InceptionResnetV2,Resnet152,NASNet-mobile,NASNet。我使用前4个网络InceptionV4,InceptionResnetV2,Resnet152,NASNet-mobile获得了非常好的结果,但使用NASNet时情况并非如此。问题是验证集上的ROC曲线下面积始终=0.5,并且验证图像的logits大致具有相同的值,这真的很奇怪。事实上,我在前10000个小批次中使用NASNet-mobile获得了这种结果,但之后模型会收敛。以下是我脚本中的超参数值:
batch_size=10
weight_decay = 0.00004 
optimizer = rmsprop
rmsprop_momentum = 0.9 
rmsprop_decay = 0.9 

learning_rate_decay_type =  exponential 
learning_rate =  0.01 
learning_rate_decay_factor = 0.94 
num_epochs_per_decay = 2.0 #'Number of epochs after which learning rate

我在使用tensorflow时还是个新手,没有在其他地方找到相关的信息。这是一个非常奇怪的行为,因为我使用了相同的参数和相同的输入,但是似乎使用NASNet会有问题。我不仅寻求解决方案(如果可能的话,因为我知道在没有关于模型的太多细节的情况下解决此类问题很困难),而且希望了解应该在哪里查找和如何进行故障排除的见解将是很好的。有人之前在微调NASNet时遇到过这个问题吗?例如,模型没有收敛的情况等等。最后,我知道在这种问题上获得答案确实很困难,但我希望至少能获得一些洞察力,以便可以继续进行研究。

编辑: 以下是交叉熵和正则化损失的图表: enter image description here enter image description here

编辑: 像答案中提出的那样,我将drop_path_keep_prob参数设置为1,现在模型已经收敛,并且在验证集上获得了良好的准确性。但现在的问题是:这个参数是什么意思?它是我们应该根据我们的数据集调整的参数之一(如学习率等)吗?

1个回答

2
您可以进行最简单的健全性检查,即在单个小批量上运行微调。如果没有任何大问题,任何深层网络都应该能够过度拟合。如果您发现它无法这样做,则必须出现某些问题,可能与定义或使用定义的方式有关。
我唯一的猜测是,这可能与 drop_path 实现有关。在移动版本中,它被禁用,但在大型模型的训练期间启用。它可能会使模型不稳定到足以不能进行微调,因此最好尝试将其禁用后进行训练。

我添加了损失和正则化的图表,这样你就可以更清楚地看到发生了什么。drop_path是做什么用的?我应该将其设置为1以禁用它吗? - Maystro
感谢@Gavin Gray。我将drop_path_keep_prob设置为1,然后启动了一次训练。这次在验证集上获得了非常好的准确性,就像其他网络一样。但现在问题是:这个参数是什么意思?在接受你的答案之前,我想要更多的解释。 - Maystro
NASNet中使用的单元具有多个分支,这些分支被求和然后连接在一起(请参见NASNet论文中的图4)。drop_path是在训练期间保留任何一个路径的概率;否则它将被设置为零。实际上,启用此功能后,论文中的网络无法从随机初始化中收敛,因此在训练期间线性调度它从1.0到0.7。 - gngdb
我不确定我理解了。drop_path = 1.0 是指网络在训练期间将保留所有这些路径?你的意思是启用1还是0? - Maystro
是的,1.0 表示路径被保留。在原始配置中它被称为 drop_path_keep_prob,这个名字虽然不太简洁明了但比较容易理解。 - gngdb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接