我知道这很不好做,但是我发现使用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
与验证集相比,我似乎过度拟合了训练集。但是它们应该是相同的!那怎么可能?
答案 0 :(得分:1)
训练损失是即时计算的,并且在训练时期之后才计算验证损失。因此,一开始几乎没有经过训练的网络会使训练损失比实际情况更糟。这种影响应该在以后的时代消失,因为那时得分的一个时代不再那么重要了。
此行为在keras faq中得到解决。 如果您在纪元末尾用自写的回调函数对两者进行评估,则它们应该相同。
答案 1 :(得分:0)
一段时间后阅读此书的人: 我仍然不明白这个问题是怎么发生的,但是它对批量大小的处理(减少了)大有帮助。