当前位置: 首页 > 知识库问答 >
问题:

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

严宏旷
2023-03-14

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

源代码:使用RestNet50架构进行分类

预训练模型的文件大小为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
)

在训练数据集中,我有两个文件夹狗和猫,每个文件夹持有近10,000张图像。当我编译脚本时,我得到以下错误

纪元1/1 2018-05-12 13:04:45.847298: W tensorflow/core/框架/allocator.cc:101]分配38535168超过10%的系统内存。2018-05-12 13:04:46.845021: W tensorflow/core/框架/allocator.cc:101]分配37171200超过10%的系统内存。2018-05-12 13:04:47.552176: W Tenorflow/core/框架/allocator.cc:101] 37171200的分配超过了系统内存的10%.2018-05-12 13:04:48.199240: W tenorflow/core/框架/allocator.cc:101] 37171200的分配超过了系统内存的10%.2018-05-12 13:04:48.918930: W tensorflow/core/框架/allocator.cc:101] 37171200的分配超过了系统内存的10%2018-05-12 13:04:49.274137: W tensorflow/core/框架/allocator.cc:101] 19267584的分配超过了系统内存的10%2018-05-12 13:04:49.647061:W tenstorflow/core/框架/allocator.cc:101] 19267584的分配超过了系统内存的10%。2018-05-12 13:04:50.028839: W tenstorflow/core/框架/allocator.cc:101] 19267584的分配超过了系统内存的10%。2018-05-12 13:04:50.413735: W tenorflow/core/framework/allocator.cc:101] 19267584的分配超过了系统内存的10%。

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

谢谢

共有3个答案

太叔高义
2023-03-14

或者,您可以设置环境变量TF\u CPP\u MIN\u LOG\u LEVEL=2以过滤信息和警告消息。我发现在这个github问题上,他们抱怨相同的输出。要在python中实现这一点,您可以使用以下解决方案:

import os
import tensorflow as tf
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'

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

邓正谊
2023-03-14

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

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

       Docker Icon > Preferences >  Advanced > Memory

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

现在再次运行张量流容器。

在单独的终端中使用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
巫马松
2023-03-14

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

train_generator = data_generator.flow_from_directory(
    'path_to_the_training_set',
    target_size = (IMG_SIZE,IMG_SIZE),
    batch_size = 2,
    class_mode = 'categorical'
    )
 类似资料:
  • 我使用Keras/Tensorflow在python中创建了一个程序。我对数据的创建和训练没有任何问题。但是,当我想评估我的模型时,我有以下错误: 这似乎是一个内存分配问题。我缩小了模型的尺寸,缩小了所有参数,但没有任何变化。我不知道如何解决这个问题。

  • 我正在尝试使用我的GPU而不是CPU来训练一个自定义的对象检测模型。我遵循了以下教程中给出的所有说明:https://tensorflow-object-detection-api-tutorial.readthedocs.io/ 我已经测试了我的软件,一切都已安装并正常工作。 目前正在使用: Windows 10 但问题是,在训练几秒钟后,它停止使用GPU,并发出以下警告消息。 此外,我没有在我

  • 问题内容: 每次从stdin读取字母“ u”时,此代码段将分配2Gb,并且在读取“ a”后将初始化所有分配的字符。 我在具有3Gb内存的linux虚拟机上运行此代码。在使用htop工具监视系统资源使用情况时,我已经意识到malloc操作不会反映在资源上。 例如,当我仅输入一次“ u”(即分配2GB的堆内存)时,我看不到htop中的内存使用量增加2GB。只有当我输入“ a”(即初始化)时,我才会看到

  • 我用Tensorflow后端在Keras上做了一个CNN,我的训练集有144个例子,但是每个例子的大小为3200*101。我的CNN是非常基本的,只是为了学习,batch_size2(我试着从32减少,但没有任何改善)。一个CNN层,一个展平层和一个密集层用于输出(11类)。当我符合模型时,我的笔记本电脑显示“分配(一个大数字)超过系统内存的10”,然后冻结,即使没有运行1个时代。我不能“压缩”这

  • 我在运行OSX 10.13.6的Mac上有PHP版本7.2.9。如果我加载phpinfo(),我在Safari中看到memory_limit=256M。然而,当我看php.ini(/usr/本地/php5/lib/php.ini)memory_limit=128M。这种差异的原因是什么——显然限制是在其他地方设定的,但是在哪里?我需要增加内存限制

  • 问题内容: 这是一篇受此评论启发的帖子,内容涉及如何在CPython中为对象分配内存。最初,这是在创建列表并将其添加到for循环中_以_ 实现列表理解的上下文中。 所以这是我的问题: CPython中有多少个不同的分配器? 每个功能是什么? 什么时候被正式称为?(根据此评论中的内容,列表理解可能不会导致调用, python在启动时会为其分配多少内存? 是否有规则来控制哪些数据结构在此存储器上首先获