Utilisation de poids pré-formés ResNet50 J'essaie de créer un classificateur. La base de code est entièrement implémentée dans l’API de haut niveau Keras de Keras. Le code complet est affiché dans le lien GitHub ci-dessous.
Code source: Classification à l'aide de l'architecture RestNet5
La taille de fichier du modèle pré-formé est de 94.7mb .
J'ai chargé le fichier pré-formé
new_model = Sequential()
new_model.add(ResNet50(include_top=False,
pooling='avg',
weights=resnet_weight_paths))
et adapter le modèle
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
)
et dans l'ensemble de données de formation, j'ai deux dossiers chien et chat, chacun contenant près de 10 000 images. Quand j'ai compilé le script, j'obtiens l'erreur suivante
Epoch 1/1 2018-05-12 13: 04: 45.847298: W tensorflow/core/framework/allocator.cc: 101] L'allocation de 38535168 dépasse 10% de la mémoire du système. 2018-05-12 13: 04: 46.845021: W tensorflow/core/framework/allocator.cc: 101] L'allocation de 37171200 dépasse 10% de la mémoire du système. 2018-05-12 13: 04: 47.552176: W tensorflow/core/framework/allocator.cc: 101] L'allocation de 37171200 dépasse 10% de la mémoire du système. 2018-05-12 13: 04: 48.199240: W tensorflow/core/framework/allocator.cc: 101] L'allocation de 37171200 dépasse 10% de la mémoire du système. 2018-05-12 13: 04: 48.918930: W tensorflow/core/framework/allocator.cc: 101] L'allocation de 37171200 dépasse 10% de la mémoire du système. 2018-05-12 13: 04: 49.274137: W tensorflow/core/framework/allocator.cc: 101] L'allocation de 19267584 dépasse 10% de la mémoire du système. 2018-05-12 13: 04: 49.647061: W tensorflow/core/framework/allocator.cc: 101] L'allocation de 19267584 dépasse 10% de la mémoire du système. 2018-05-12 13: 04: 50.028839: W tensorflow/core/framework/allocator.cc: 101] L'allocation de 19267584 dépasse 10% de la mémoire du système. 2018-05-12 13: 04: 50.413735: W tensorflow/core/framework/allocator.cc: 101] L'allocation de 19267584 dépasse 10% de la mémoire du système.
Des idées pour optimiser la façon de charger le modèle pré-formé (ou) vous débarrasser de ce message d'avertissement?
Merci!
Essayez de réduire l'attribut batch_size à un petit nombre (comme 1,2 ou 3). Exemple:
train_generator = data_generator.flow_from_directory(
'path_to_the_training_set',
target_size = (IMG_SIZE,IMG_SIZE),
batch_size = 2,
class_mode = 'categorical'
)
J'avais le même problème lors de l'exécution du conteneur Tensorflow avec les blocs-notes Docker et Jupyter. J'ai pu résoudre ce problème en augmentant la mémoire du conteneur.
Sur Mac OS, vous pouvez facilement le faire à partir de:
Docker Icon > Preferences > Advanced > Memory
Faites glisser la barre de défilement au maximum (par exemple, 4 Go). Appliquez et le moteur Docker redémarrera.
Maintenant, lancez à nouveau votre conteneur de flux tensoriel.
C'était pratique d'utiliser le docker stats
commande dans un terminal séparé Elle montre l’utilisation de la mémoire du conteneur en temps réel et vous permet de voir la consommation de mémoire qui augmente:
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
Vous pouvez également définir la variable d'environnement TF_CPP_MIN_LOG_LEVEL=2
pour filtrer les informations et les messages d’avertissement. J'ai trouvé cela sur ce problème de github où ils se plaignent du même résultat . Pour faire cela en python, vous pouvez utiliser la solution de here :
import os
import tensorflow as tf
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
Vous pouvez même l'activer et le désactiver à volonté. Je teste la taille de lot maximale possible avant d'exécuter mon code et je peux désactiver les avertissements et les erreurs en le faisant.
Je courais un petit modèle sur un processeur et avait le même problème. Ajouter:os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
résolu le problème.