keras CNN:训练和验证集相同,但准确性不同

时间:2018-08-29 08:17:14

标签: tensorflow keras deep-learning

我知道这很不好做,但是我发现使用keras mobilenet时有些奇怪:

我将相同的数据用于训练和验证集:

train_generator = train_datagen.flow_from_directory(
    train_dir,
    target_size=(IM_WIDTH, IM_HEIGHT),
    batch_size=batch_size,
    class_mode = "categorical"
)
validation_generator = train_datagen.flow_from_directory(
  train_dir,
  target_size=(IM_WIDTH, IM_HEIGHT),
  class_mode = "categorical"
)

但是我在两个方面的准确性都不同!

epoch 30/30 - loss: 0.3485 - acc: 0.8938 - val_loss: 1.7545 - val_acc: 0.4406

与验证集相比,我似乎过度拟合了训练集。但是它们应该是相同的!那怎么可能?

2 个答案:

答案 0 :(得分:1)

训练损失是即时计算的,并且在训练时期之后才计算验证损失。因此,一开始几乎没有经过训练的网络会使训练损失比实际情况更糟。这种影响应该在以后的时代消失,因为那时得分的一个时代不再那么重要了。

此行为在keras faq中得到解决。 如果您在纪元末尾用自写的回调函数对两者进行评估,则它们应该相同。

答案 1 :(得分:0)

一段时间后阅读此书的人: 我仍然不明白这个问题是怎么发生的,但是它对批量大小的处理(减少了)大有帮助。