Python Tensorflow分配内存:38535168的分配超过系统内存的10%

Python Tensorflow分配内存:38535168的分配超过系统内存的10%,python,tensorflow,memory,keras-layer,resnet,Python,Tensorflow,Memory,Keras Layer,Resnet,使用ResNet50预先训练的权重,我试图构建一个分类器。代码库在Keras高级Tensorflow API中完全实现。完整的代码发布在下面的GitHub链接中 源代码: 预训练模型的文件大小为94.7mb 我加载了预先训练过的文件 new_model = Sequential() new_model.add(ResNet50(include_top=False, pooling='avg', weights=resnet_wei

使用ResNet50预先训练的权重,我试图构建一个分类器。代码库在Keras高级Tensorflow API中完全实现。完整的代码发布在下面的GitHub链接中

源代码:

预训练模型的文件大小为94.7mb

我加载了预先训练过的文件

new_model = Sequential()

new_model.add(ResNet50(include_top=False,
                pooling='avg',
                weights=resnet_weight_paths))
并符合模型

train_generator = data_generator.flow_from_directory(
    'path_to_the_training_set',
    target_size = (IMG_SIZE,IMG_SIZE),
    batch_size = 12,
    class_mode = 'categorical'
    )

validation_generator = data_generator.flow_from_directory(
    'path_to_the_validation_set',
    target_size = (IMG_SIZE,IMG_SIZE),
    class_mode = 'categorical'
    )

#compile the model

new_model.fit_generator(
    train_generator,
    steps_per_epoch = 3,
    validation_data = validation_generator,
    validation_steps = 1
)
在训练数据集中,我有两个文件夹“狗”和“猫”,每个文件夹都有近10000张图片。当我编译脚本时,我得到以下错误

2018年1月1日13:04:45.847298:W tensorflow/core/framework/allocator.cc:101]38535168的分配 超过系统内存的10%。2018-05-12 13:04:46.845021:W tensorflow/core/framework/allocator.cc:101]分配37171200 超过系统内存的10%。2018-05-12 13:04:47.552176:W tensorflow/core/framework/allocator.cc:101]分配37171200 超过系统内存的10%。2018-05-12 13:04:48.199240:W tensorflow/core/framework/allocator.cc:101]分配37171200 超过系统内存的10%。2018-05-12 13:04:48.918930:W tensorflow/core/framework/allocator.cc:101]分配37171200 超过系统内存的10%。2018-05-12 13:04:49.274137:W tensorflow/core/framework/allocator.cc:101]19267584的分配 超过系统内存的10%。2018-05-12 13:04:49.647061:W tensorflow/core/framework/allocator.cc:101]19267584的分配 超过系统内存的10%。2018-05-12 13:04:50.028839:W tensorflow/core/framework/allocator.cc:101]19267584的分配 超过系统内存的10%。2018-05-12 13:04:50.413735:W tensorflow/core/framework/allocator.cc:101]19267584的分配 超过系统内存的10%

有没有办法优化加载预训练模型的方式(或)消除此警告消息


谢谢

尝试将“批次大小”属性减少为一个较小的数字(如1、2或3)。 例如:


或者,您可以设置环境变量
TF\u CPP\u MIN\u LOG\u LEVEL=2
以过滤信息和警告消息。我发现那是我的衣服。要在python中实现这一点,您可以使用以下解决方案:


你甚至可以用这个随意打开和关闭它。在运行代码之前,我测试了最大可能的批处理大小,在执行此操作时,我可以禁用警告和错误。

我在CPU上运行了一个小型模型,并且遇到了相同的问题。添加:
os.environ['TF\u CPP\u MIN\u LOG\u LEVEL']=“3”
解决了这个问题。

我在运行带有Docker和Jupyter笔记本的Tensorflow容器时遇到了同样的问题。我能够通过增加容器内存来解决这个问题

在Mac OS上,您可以通过以下方式轻松完成此操作:

       Docker Icon > Preferences >  Advanced > Memory
将滚动条拖动到最大值(例如4GB)。应用,它将重新启动Docker引擎

现在再次运行tensor流容器

在单独的终端中使用
docker stats
命令非常方便 它实时显示容器内存使用情况,您可以看到内存消耗量正在增长:

CONTAINER ID   NAME   CPU %   MEM USAGE / LIMIT     MEM %    NET I/O             BLOCK I/O           PIDS
3170c0b402cc   mytf   0.04%   588.6MiB / 3.855GiB   14.91%   13.1MB / 3.06MB     214MB / 3.13MB      21

我也有同样的问题,我得出结论,当我看到这个错误时,有两个因素需要考虑: 1-批处理大小==>因为它负责每个历元要处理的数据大小 2-图像大小==>图像尺寸越高(图像大小),需要处理的数据越多

因此,对于这两个因素,RAM无法处理所有需要的数据

为了解决这个问题,我尝试了两个案例: 第一次将批次大小从32更改为3或2
第二次将图像大小从(608608)减小到(416416)

我遇到了相同的错误,我尝试设置os.environment标志…但没有成功

然后我继续,将批处理大小从16个减少到8个,从那以后它就开始正常工作了。
这是因为,train方法考虑了批处理大小……我觉得,减小映像大小也会起作用……如上所述。

在Linux平台上运行代码时,我也面临同样的问题。 我将以前设置为0的交换内存大小更改为1GB,问题得到了解决

有关更多详细信息,请访问此链接


为了澄清,模型是否在这些消息之后运行?是的,它运行…..在这种情况下,请查看?除非有其他原因需要减少内存使用。为什么减少批处理大小可以解决这个问题?(直觉上,这意味着训练/验证数据占用的内存更少,但我不知道如何!)@Omrii这是缓存的问题。大多数数据加载器并不总是将所有数据保存在内存中,而且几乎所有数据加载器都不会将重要数据保存在GPU内存中。通过减少批处理大小,您可以减少培训任何步骤所需的数据量,允许一次加载的数据量更少,并且仍然保持最佳吞吐量。所以不,数据不是更小,但是是的,它占用更少的RAM和视频RAM。Tensorflow在这里很聪明,可以帮你省去头痛。有了它,信息就不会显示出来,而是问题persists@VMMF就我和原问题而言,这不是一个问题。它只使用了超过10%,我明确地测试了最大利用率,所以我当然会超过这个。如果您遇到的利用率问题实际上是一个问题,那么您可能需要做更多的工作。减少批量大小。减小图像大小或网络大小,这在问题中这样的预训练模型中可能是不可恢复的。如果您仍然存在问题,我建议您根据您遇到的问题提出一个更符合您的问题的问题,我们将尽力提供帮助。这样,信息不会显示,但问题仍然存在
       Docker Icon > Preferences >  Advanced > Memory
CONTAINER ID   NAME   CPU %   MEM USAGE / LIMIT     MEM %    NET I/O             BLOCK I/O           PIDS
3170c0b402cc   mytf   0.04%   588.6MiB / 3.855GiB   14.91%   13.1MB / 3.06MB     214MB / 3.13MB      21