Tensorflow分配内存:38535168的分配超过系统内存的10%
keras-layer
python
tensorflow
12
0

使用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
)

在Training数据集中,我有两个文件夹dog和cat,每个文件夹可容纳10,000张图片。编译脚本时,出现以下错误

时代1/1 2018-05-12 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%。

有什么想法可以优化加载预训练模型的方式(或摆脱这种警告消息)?

谢谢!

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

我在CPU上运行小型模型,并且遇到了同样的问题。添加: os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'解决了它。

收藏
评论

尝试将batch_size属性减小为较小的数字(例如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'
    )
收藏
评论

在使用Docker和Jupyter Notebook运行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
收藏
评论

或者,您可以设置环境变量TF_CPP_MIN_LOG_LEVEL=2以过滤掉信息和警告消息。我在这个github问题上发现他们抱怨相同的输出 。要做到这一点蟒之内,你可以使用该解决方案在这里

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

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号