我有一个数据集,大约包含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时遇到过这个问题吗?例如,模型没有收敛的情况等等。最后,我知道在这种问题上获得答案确实很困难,但我希望至少能获得一些洞察力,以便可以继续进行研究。
编辑: 像答案中提出的那样,我将drop_path_keep_prob参数设置为1,现在模型已经收敛,并且在验证集上获得了良好的准确性。但现在的问题是:这个参数是什么意思?它是我们应该根据我们的数据集调整的参数之一(如学习率等)吗?
drop_path
是在训练期间保留任何一个路径的概率;否则它将被设置为零。实际上,启用此功能后,论文中的网络无法从随机初始化中收敛,因此在训练期间线性调度它从1.0到0.7。 - gngdbdrop_path_keep_prob
,这个名字虽然不太简洁明了但比较容易理解。 - gngdb