为什么CNN模型的准确性每次都在变化



当我通过CNN运行图像分类代码时,我得到了这个错误,"73138176的分配超过了系统内存的10%"。我用不同的解决方案来解决我的问题。然而,它在每次测试中都改变了模型的准确性。

此处的模型精度为0.6761

model.fit(X, y, batch_size=32, epochs=9, validation_split=0.3)

然后,当我将batch_size降低到2时,这里的准确性提高到0.8451。此外,它没有给出任何与分配问题有关的错误。

model.fit(X, y, batch_size=2, epochs=9, validation_split=0.3)

然后,我也很好奇一个代码,它也解决了分配问题。然而,这一次,此处的模型精度为0.7183。代码为;

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
model.fit(X, y, batch_size=32, epochs=9, validation_split=0.3)

我的问题是,你实际上建议我应该遵循哪个代码?另外,你能告诉我为什么精度每次都会变化吗?

感谢您的帮助和建议。

如果您想要完全可重复的训练结果,则需要消除所有随机性来源。对于典型的模型训练,主要来源有1:您的数据集;测试/训练分割的随机化或批次生成顺序的随机化。和2:模型初始化;如果你想每次训练相同的模型,你需要每次从相同的初始参数开始。你如何确保每次训练都得到"相同的随机数"因框架而异;几年前我在TF的最后一次尝试是不合理的痛苦;但这是可以做到的,谷歌应该知道如何做,如果你搜索修复TF中的随机种子。

然而,修复随机种子可能不是你感兴趣的;对于做可重复的实验,这正是你想要的。但就你的模型的生产质量而言,那就另当别论了。如果你发现你最终得到的模型根据种子的不同表现得相当不同(许多问题本质上都具有这种性质,存在多个"同等有效"但相当不同的解释(,那么训练一个这样的模型集合,每个模型都有不同的随机种子,是一件有用的事情;通过这种方式,您可以明确地意识到建模和数据集留下的"解释空间"的大小。

最新更新