我有一个大约34000个图像的数据集,分为2组:火车(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小批量使用 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
在某处存在问题 . 我收缩了例如?最后,我知道很难在这些问题上得到答案,但我希望至少得到一些见解,以便我可以继续进行调查 .
EDIT: 以下是交叉熵和正则化损失的图:
EDIT: 正如答案中提出的,我确实将drop_path_keep_prob参数设置为1,现在模型已经收敛,我在验证集上获得了很好的准确性 . 但现在的问题是:这个参数是什么意思?它是我们应该适应我们的数据集(如学习率等)的一个参数吗?
1 回答
您可以做的最简单的理智检查是在单个小批量上运行微调 . 如果没有任何大问题,任何深层网络都应该能够过度使用 . 如果您发现它无法做到这一点,那么定义或您使用定义的方式肯定存在问题 .
在你的情况下我唯一的猜测是它可能与
drop_path
实现有关 . 它微调,所以它可能值得尝试训练它禁用 .