我有一个大约 34000 张图像的数据集,分为 2 组:训练(30000 张图像)和验证(4000 张图像)集。每张图像都是从视频中拍摄的两张图像之间差异的结果(每对图像之间的时间偏移约为 1 秒)。视频具有静态背景,因此差异图像包含太多黑色,只有一两个带颜色的小区域。每个差异图像都有一个标签(有一个 Action 或没有.. 1 或 0)所以这是一种二元分类。简而言之,我使用在 slim
上预训练的 ImageNet
模型对我的数据集进行微调。我已经使用 5 个不同的网络启动了 5 个单独的训练: InceptionV4, InceptionResnetV2, Resnet152, NASNet-mobile, NASNet
。我使用前 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,现在模型收敛了,并且我在验证集上获得了良好的准确性。但现在的问题是:这个参数是什么意思?它是我们应该适应数据集的参数之一(例如学习率等)吗?
最佳答案
您可以做的最简单的健全性检查是在单个小批量上运行微调。如果没有任何大问题,任何深度网络都应该能够过度拟合。如果您发现它不能这样做,那么定义或您使用定义的方式一定有问题。
在你的情况下,我唯一的猜测是它可能与 drop_path
实现有关。它在移动版本中被禁用,但在大型模型的训练期间启用。它可能会使模型不稳定,以至于无法进行微调,因此可能值得尝试在禁用它的情况下进行训练。
关于python - NASNet-A 微调验证精度差,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48385265/