Python Tensorflow分配内存:38535168的分配超过系统内存的10%
使用ResNet50预先训练的权重,我试图构建一个分类器。代码库在Keras高级Tensorflow API中完全实现。完整的代码发布在下面的GitHub链接中 源代码: 预训练模型的文件大小为94.7mb 我加载了预先训练过的文件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
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