我有大约34000张图像的数据集,分为2组:火车(30000张图像)和验证(4000张图像)。每个图像是从视频拍摄的两个图像之间的差异的结果(每对图像之间的时间偏移约为1秒)。视频具有静态背景,因此差异图像包含太多黑色,只有一个或两个带有颜色的小区域。每个差异图像都有一个标签(有一个动作或没有.. 1或0)所以这是一种二进制分类。简而言之,我使用slim
上预训练的ImageNet
模型对我的数据集进行微调。我使用5个不同的网络InceptionV4, InceptionResnetV2, Resnet152, NASNet-mobile, NASNet
启动了5次单独培训。我使用前4个网络InceptionV4, InceptionResnetV2, Resnet152, NASNet-mobile
获得了非常好的结果,但使用NASNet
并非如此。问题是验证集上的Area Under the ROC curve
总是= 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,现在模型已经收敛,并且我在验证集上获得了很好的准确性。但现在的问题是:这个参数是什么意思?它是我们应该适应我们的数据集(如学习率等)的一个参数吗?
答案 0 :(得分:2)
您可以做的最简单的理智检查是在单个小批量上运行微调。如果没有任何大问题,任何深层网络都应该能够过度使用。如果你发现它不能那样做,那么定义或你使用定义的方式肯定会有问题。
我的唯一猜测是,它可能与drop_path
实现有关。它在移动版本中被禁用,但在大型模型的培训期间启用。它可能会使模型不稳定而不会微调,因此可能值得尝试用它进行训练。