当前位置:  开发笔记 > 编程语言 > 正文

为什么在Keras中改变我的验证集会改变我的模型的性能?

如何解决《为什么在Keras中改变我的验证集会改变我的模型的性能?》经验,为你挑选了1个好方法。

为什么我很困惑:

如果我在示例[A,B,C]上测试我的模型,它将获得一定的准确性.如果我在示例[C,B,A]上测试相同的模型,它应该获得相同的精度.换句话说,改组示例不应该改变我的模型的准确性.但这似乎发生在下面:

一步步:

这是我训练模型的地方:

model.fit_generator(batches, batches.nb_sample, nb_epoch=1, verbose=2,
                    validation_data=val_batches,
                    nb_val_samples=val_batches.nb_sample)

这是我测试模型的地方,不需要改组验证集:

gen = ImageDataGenerator()
results = []
for _ in range(3):
    val_batches = gen.flow_from_directory(path+"valid", batch_size=batch_size*2,
                                          target_size=target_size, shuffle=False)
    result = model.evaluate_generator(val_batches, val_batches.nb_sample)
    results.append(result)

结果如下(val_loss,val_acc):

[2.8174608421325682, 0.17300000002980231]
[2.8174608421325682, 0.17300000002980231]
[2.8174608421325682, 0.17300000002980231]

请注意,验证的准确性是相同的.

这是我测试模型的地方,带有一个混乱的验证集:

results = []
for _ in range(3):
    val_batches = gen.flow_from_directory(path+"valid", batch_size=batch_size*2,
                                          target_size=target_size, shuffle=True)
    result = model.evaluate_generator(val_batches, val_batches.nb_sample)
    results.append(result)

结果如下(val_loss,val_acc):

[2.8174608802795409, 0.17299999999999999]
[2.8174608554840086, 0.1730000001192093]
[2.8174608268737793, 0.17300000059604645]

请注意,尽管验证集未更改且模型未更改,但验证精度仍然不一致.这是怎么回事?


注意:

我每次都在评估整个验证集.model.evaluate_generator在评估模型之后返回等于val_batches.nb_sample的示例数,即验证集中的示例数.



1> Marcin Możej..:

这是一个非常有趣的问题.答案是因为神经网络使用的float32格式不够准确float64- 这样的波动只是实现了下溢现象.

你丢失的情况 - 你可能会注意到在小数部分的第7个十进制数字之后出现差异 - float32格式的精确度是多少.所以 - 基本上 - 您可以假设您的示例中显示的所有数字在float32表示方面都相同.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有