【发布时间】:2018-07-01 07:14:19
【问题描述】:
我有一个包含大约 34000 张图像的数据集,分为两组:训练(30000 张图像)和验证(4000 张图像)组。每张图像是从视频中拍摄的两张图像之间差异的结果(每对图像之间的时间偏移量约为 1 秒)。视频具有静态背景,因此差异图像包含太多黑色,只有一两个带颜色的小区域。每个差异图像都有一个标签(有一个动作或没有.. 1 或 0),所以这是一种二进制分类。简而言之,我使用在ImageNet 上预训练的slim 模型对我的数据集进行微调。我已经使用 5 个不同的网络启动了 5 个单独的训练:InceptionV4, InceptionResnetV2, Resnet152, NASNet-mobile, NASNet。我使用前 4 个网络 InceptionV4, InceptionResnetV2, Resnet152, NASNet-mobile 获得了非常好的结果,但使用 NASNet 的情况并非如此。问题是验证集上的Area Under the ROC curve 总是 = 0.5,并且验证图像的 logits 大致具有相同的值,这真的很奇怪。事实上,我在前 10000 个 mini-batch 上使用 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,现在模型收敛了,我在验证集上获得了很好的准确性。但现在的问题是:这个参数是什么意思?它是我们应该适应数据集的参数之一(如学习率等)吗?
【问题讨论】:
标签: python tensorflow machine-learning deep-learning conv-neural-network