【发布时间】:2019-01-22 20:56:15
【问题描述】:
我在5GB 的输入集上运行卷积神经网络,训练输出大小相同,因此总共有 10GB 的数据。我保留了大约50GB 的内存,但仍然遇到内存问题。我正在使用亚当优化器,我的模型拟合如下所示:
cnn_model.fit(x_train,y_train, validation_data=(x_test,y_test), callbacks=[earlystopper], epochs=25)
知道如何改善这种情况吗?这里有人https://github.com/tensorflow/tensorflow/issues/18736 说“Adam 和 RMSProp 是有问题的,因为它们记住了历史梯度”,有什么想法可以解决这个问题吗?
【问题讨论】:
-
你计算过中间层在前向和后向传播中使用的内存吗?
-
不,我该怎么做,我将如何使用这些信息?请解释
-
假设您输入一个
224 x 224 x 3图像并将其通过3 x 3 x 64转换层(使用零填充以保持大小),然后是2 x 2maxpool,输出这两个层中的将是112 x 112 x 64。现在,如果你有 32 张图像,max-pool 层的输出将占用32 x 112 x 112 x 64 = 25690112字节 ~ 25 MB。您必须考虑所有此类中间输出。使用this 来确定使用的内存,因为它会变得相当复杂。如果需要,您可以减少批量大小。 -
是否有任何标志可以传递以最小化中间数据的存储,或尽可能保存先前迭代的状态?
-
我认为我们需要更多信息来帮助您,例如您正在训练哪个模型、图像的大小和数量(不是您提供的总大小)以及训练参数。你是在 CPU 还是 GPU 上训练?还请包括真正的未经编辑的内存不足错误。
标签: python tensorflow keras out-of-memory conv-neural-network