在CNN模型中使用更多图层时出现内存错误


7

在我的Dell Core i7-16GB RAM-4gb 960m GPU笔记本电脑上,我正在使用3d CNN对肺部CT图像进行分类的项目。我正在使用Tensorflow的CPU版本。图像准备为numpy数组大小(25,50,50)。

我的CNN模型具有2个转换层,2个maxpool层,1个FC层和输出层。通过这种架构,我可以训练大约(5000至6000)个样本的模型。添加更多层后,我的模型现在具有6个转换层,3个最大池层,FC和输出层。我的问题是在更改架构后,仅使用了1000多个样本,我的内存被填满,并且出现内存错误。我试图做较小的批次,但是每次都会出现相同的错误。我有两个问题:

  1. 为什么通过添加更多层,模型需要更多内存?

  2. 有什么办法可以解决这类问题?


这可能是因为您有很多参数,并且默认情况下您的GPU用于计算,而4GB可能不适合..
Aditya

我使用的是Tensorflow的CPU版本而不是GPU
Hunar A.Ahmed

Answers:


4
  1. 层越多,网络的参数就越多,这反过来又意味着需要更多的内存空间来存储这些参数。

  2. 唯一的解决方案(除了增加计算机的内存之外)是减小网络的大小。关于此的一些提示:首先,3D CNN比2D CNN需要更多的空间。一种想法可能是转换为二维。除此之外,具有最多参数的层是FC层。这些有时是多余的。我建议先减小那些的大小。


我认为3d CNN的准确性要高于2d,因为我使用的是3d CNN。我的FC层中的节点数为1024,是否意味着减少该数量?这不会影响准确性吗?
Hunar A.Ahmed

1
1024204820481024+10242.1140100

4

除了MzdR,您还可以尝试使用生成器。由于您是模特,在训练时实际上并不需要将所有图像都存储在内存中,因此我认为生成器应该很好用。

从stackoverflow 检出问题。内存交易时,生成器非常酷。但是,如果仍然失败,请尝试减小FC层的大小。


我认为对于我的情况,生成器是一个有趣的主意,我会尝试的,但是我的问题是我对生成器的了解不多,因为我是python的新手。
Hunar A.Ahmed

在keras中使用生成器,请阅读这篇中等技巧。它可以帮助你得到一个想法
加文

在keras中这要容易得多,但是我的代码是用原始的tensorflow编写的,因此我无法将其更改为keras。
Hunar A.Ahmed

这个来自stackoverflow的问题肯定会有所帮助
gavin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.