Memoria de asignación de Tensorflow: la asignación de 38535168 supera el 10% de la memoria del sistema

Usando pesas pre-entrenadas de ResNet50, estoy tratando de construir un clasificador. El código base está completamente implementado en la API Tensorflow de alto nivel de Keras. El código completo está publicado en el siguiente enlace de GitHub.

Código fuente: Clasificación usando la architecture RestNet50

El tamaño del archivo del modelo pre-entrenado es 94.7mb .

Cargué el archivo pre-entrenado

new_model = Sequential() new_model.add(ResNet50(include_top=False, pooling='avg', weights=resnet_weight_paths)) 

y encaja el modelo

 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 ) 

y en el conjunto de datos de Entrenamiento, tengo dos carpetas, perro y gato, cada una con casi 10,000 imágenes. Cuando compilé el script, obtengo el siguiente error

Época 1/1 2018-05-12 13: 04: 45.847298: W tensorflow / core / framework / allocator.cc: 101] La asignación de 38535168 excede el 10% de la memoria del sistema. 2018-05-12 13: 04: 46.845021: W tensorflow / core / framework / allocator.cc: 101] La asignación de 37171200 supera el 10% de la memoria del sistema. 2018-05-12 13: 04: 47.552176: W tensorflow / core / framework / allocator.cc: 101] La asignación de 37171200 supera el 10% de la memoria del sistema. 2018-05-12 13: 04: 48.199240: W tensorflow / core / framework / allocator.cc: 101] La asignación de 37171200 supera el 10% de la memoria del sistema. 2018-05-12 13: 04: 48.918930: W tensorflow / core / framework / allocator.cc: 101] La asignación de 37171200 supera el 10% de la memoria del sistema. 2018-05-12 13: 04: 49.274137: W tensorflow / core / framework / allocator.cc: 101] La asignación de 19267584 excede el 10% de la memoria del sistema. 2018-05-12 13: 04: 49.647061: W tensorflow / core / framework / allocator.cc: 101] La asignación de 19267584 excede el 10% de la memoria del sistema. 2018-05-12 13: 04: 50.028839: W tensorflow / core / framework / allocator.cc: 101] La asignación de 19267584 excede el 10% de la memoria del sistema. 2018-05-12 13: 04: 50.413735: W tensorflow / core / framework / allocator.cc: 101] La asignación de 19267584 excede el 10% de la memoria del sistema.

¿Alguna idea para optimizar la forma de cargar el modelo pre-entrenado (o) deshacerse de este mensaje de advertencia?

¡Gracias!

Intente reducir el atributo batch_size a un número pequeño (como 1,2 o 3). Ejemplo:

 train_generator = data_generator.flow_from_directory( 'path_to_the_training_set', target_size = (IMG_SIZE,IMG_SIZE), batch_size = 2, class_mode = 'categorical' ) 

Estaba ejecutando un modelo pequeño en una CPU y tenía el mismo problema. Agregando: os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' resolvió.

Alternativamente, puede configurar la variable de entorno TF_CPP_MIN_LOG_LEVEL=2 para filtrar información y mensajes de advertencia. Encontré eso en este problema de github donde se quejan de la misma salida . Para hacerlo dentro de python, puede usar la solución desde aquí :

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

Incluso puedes encenderlo y apagarlo a voluntad con esto. Antes de ejecutar mi código, pruebo el tamaño de lote máximo posible y puedo desactivar las advertencias y los errores mientras hago esto.

Estaba teniendo el mismo problema al ejecutar el contenedor Tensorflow con Docker y Jupyter notebook. Pude solucionar este problema al boost la memoria del contenedor.

En Mac OS , puedes hacer esto fácilmente desde:

  Docker Icon > Preferences > Advanced > Memory 

Arrastre la barra de desplazamiento al máximo (por ejemplo, 4 GB). Aplicar y se reiniciará el motor Docker.

Ahora ejecuta tu contenedor de flujo tensor de nuevo.

Fue útil usar el comando de docker stats la docker stats en un terminal separado. Muestra el uso de la memoria del contenedor en tiempo real, y puede ver cuánto está aumentando el consumo de memoria:

 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