Tensorflow Allocation Memory: Распределение 38535168 превышает 10% системной памяти - PullRequest
0 голосов
/ 12 мая 2018

Используя предварительно обученные гири ResNet50, я пытаюсь построить классификатор.Кодовая база полностью реализована в высокоуровневом API-интерфейсе Tensorflow Keras.Полный код размещен в приведенной ниже ссылке GitHub.

Исходный код: Классификация с использованием архитектуры RestNet50

Размер файла предварительно обученной модели составляет 94,7 МБ .

Я загрузил предварительно обученный файл

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 изображений.Когда я скомпилировал скрипт, я получил следующую ошибку

Epoch 1/1 2018-05-12 13: 04: 45.847298: W tensflowflow / core / framework / allocator.cc: 101] Распределение38535168 превышает 10% системной памяти.2018-05-12 13: 04: 46.845021: W tenorflow / core / framework / allocator.cc: 101] Выделение 37171200 превышает 10% системной памяти.2018-05-12 13: 04: 47.552176: W tenorflow / core / framework / allocator.cc: 101] Выделение 37171200 превышает 10% системной памяти.2018-05-12 13: 04: 48.199240: W tenorflow / core / framework / allocator.cc: 101] Выделение 37171200 превышает 10% системной памяти.2018-05-12 13: 04: 48.918930: W tenorflow / core / framework / allocator.cc: 101] Выделение 37171200 превышает 10% системной памяти.2018-05-12 13: 04: 49.274137: W tenorflow / core / framework / allocator.cc: 101] Выделение 19267584 превышает 10% системной памяти.2018-05-12 13: 04: 49.647061: W tenorflow / core / framework / allocator.cc: 101] Выделение 19267584 превышает 10% системной памяти.2018-05-12 13: 04: 50.028839: W tenorflow / core / framework / allocator.cc: 101] Выделение 19267584 превышает 10% системной памяти.2018-05-12 13: 04: 50.413735: W tenorflow / core / framework / allocator.cc: 101] Выделение 19267584 превышает 10% системной памяти.

Любые идеи по оптимизации пути кзагрузить предварительно обученную модель (или) избавиться от этого предупреждающего сообщения?

Спасибо!

Ответы [ 4 ]

0 голосов
/ 19 марта 2019

У меня была такая же проблема при запуске контейнера Tensorflow с ноутбуком Docker и Jupyter. Я смог решить эту проблему, увеличив объем памяти контейнера.

В Mac OS вы можете легко сделать это из:

       Docker Icon > Preferences >  Advanced > Memory

Перетащите полосу прокрутки на максимум (например, 4 ГБ). Применить, и он перезапустит движок 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
0 голосов
/ 28 ноября 2018

Кроме того, вы можете установить переменную окружения TF_CPP_MIN_LOG_LEVEL=2, чтобы отфильтровывать информацию и предупреждающие сообщения. Я обнаружил, что на эта проблема github, где они жалуются на тот же вывод . Для этого в Python вы можете использовать решение из здесь :

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

Вы можете даже включать и выключать его по желанию. Я проверяю максимально возможный размер пакета перед запуском своего кода, и при этом могу отключить предупреждения и ошибки.

0 голосов
/ 15 января 2019

У меня была небольшая модель на процессоре, и у меня была та же проблема.Добавление: os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' разрешено.

0 голосов
/ 16 июля 2018

Попробуйте уменьшить атрибут 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'
    )
...