使用ResNet50预训练的权重我正在尝试构建分类器。代码库完全在Keras高级Tensorflow API中实现。完整的代码发布在下面的GitHub链接中。
源代码:Classification Using RestNet50 Architecture
预训练模型的文件大小 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张图像。当我编译脚本时,我收到以下错误
Epoch 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%。
优化加载预训练模型(或)的方法的任何想法都摆脱了这条警告信息?
谢谢!
答案 0 :(得分:7)
尝试将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'
)
答案 1 :(得分:3)
我在CPU上运行小型模型,并且遇到相同的问题。添加:os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
解决了该问题。
答案 2 :(得分:3)
我遇到了同样的问题,并且得出结论,看到此错误时要考虑两个因素: 1- batch_size ==>,因为这负责每个时期要处理的数据大小 2- image_size ==>图片尺寸(图片尺寸)越大,要处理的数据越多
因此对于这两个因素,RAM无法处理所有必需的数据。
为解决此问题,我尝试了两种情况: 第一次将batch_size形式从32更改为3或2 第二个将image_size从(608,608)减少到(416,416)
答案 3 :(得分:2)
或者,您可以设置环境变量TF_CPP_MIN_LOG_LEVEL=2
来过滤掉信息和警告消息。我在DriveApp.searchFiles上找到了。为此,您可以在python中使用this github issue where they complain about the same output中的解决方案:
import os
import tensorflow as tf
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
您甚至可以随意打开和关闭它。我在运行代码之前测试了最大可能的批处理大小,并且在执行此操作时可以禁用警告和错误。
答案 4 :(得分:2)
在使用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
答案 5 :(得分:0)
我遇到了同样的错误,我尝试设置os.environment标志...但是没有成功。
然后我继续进行下去,并将批量大小从16减少到8,然后它开始正常工作。 因为这是因为,训练方法考虑了批处理的大小...我觉得,减小图像大小也可以..如上所述。
答案 6 :(得分:0)
我在 Linux 平台上运行代码时遇到了同样的问题。 我将之前设置为 0 的交换内存大小更改为 1 GB,问题得到解决。
有关更多详细信息,您可以咨询此链接。