【发布时间】:2021-07-14 14:29:48
【问题描述】:
当我通过 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)
我的问题是,您实际上建议我应该遵循哪个代码?另外,请你告诉我为什么每次精度都会改变?
感谢您的每一个帮助和建议。
【问题讨论】:
-
如果没有有关数据集和模型架构的信息,真的不可能回答这个问题。模型训练时间在运行之间可能会有很大差异,并且比较一定数量的 epoch 的准确性不是一个好主意。您应该遵循准确度/验证准确度曲线(或损失曲线),例如i.stack.imgur.com/boKiX.png 。使用相同的参数再次训练您的模型,您可能会看到非常不同的结果。 TF_CPP_MIN_LOG_LEVEL 只是一个调试器标志,不应影响训练。
-
@NiteyaShah 非常感谢。我通过 TensorBoard 获取了准确度/验证图。但是,在每次运行中,精度值也会发生变化。我认为你再次训练模型是对的。
-
我正在使用@sentdex 在 YouTube 上分享的方法。他用; --> 导入随机 --> random.shuffle(training_data)。你认为这是因为我们随机获取 training_data 吗?
-
如前所述,提高日志级别并不能解决问题,它只会删除消息。这不是错误,更像是内存使用量变得非常高的警告。解决此问题的唯一方法是减少内存使用量(例如减少批量大小)或获得更多内存。
-
不,它与随机化数据集无关。这是神经网络的固有属性,这并没有错。只需训练您的模型进行更多的 epoch,您就应该让所有运行都达到几乎相同的准确度。
标签: python python-3.x python-2.7 tensorflow conv-neural-network