[PYTHON] [Google Colab] Comment interrompre l'apprentissage, puis le reprendre

1.Tout d'abord

Voici quelques conseils utiles pour utiliser Google Colab.

2. Défis

Lors de l'utilisation de Google Colab Pro, la limite peut aller jusqu'à 24 heures. Par conséquent, si la quantité de calcul du modèle dépasse 24 heures, il y a un problème que le résultat du calcul disparaît au milieu.

Par exemple, si vous estimez qu'il faut environ 24 heures pour calculer 200 époques et exécuter réellement le calcul, cela prendra un peu de temps et Google Colab peut être déconnecté près de 190 époques.

3. Solution

Pour résoudre ce problème, nous utiliserons la méthode suivante.

  1. Utilisez ModelCheckpoint () de Keras pour enregistrer le modèle en détail.
  2. La destination d'enregistrement du modèle est le dossier temporaire de Google Drive (référence: Organize Google Colab Tips)
  3. Appelez le modèle à partir du milieu et redémarrez l'entraînement lorsque le calcul est terminé.

3.1. Paramètres ModelCheckpoint ()

python


from tensorflow.keras.callbacks import ModelCheckpoint

checkpoint = ModelCheckpoint(filepath = 'XXX.h5',
                             monitor='loss',
                             save_best_only=True,
                             save_weight_only=False,
                             mode='min'
                             period=1)

Description de l'argument

1.filepath: le chemin pour enregistrer la chaîne de caractères et le fichier de modèle 2. moniteur: valeur à surveiller 3. save_best_only: Si save_best_only = True, les données surveillées n'écraseront pas le dernier meilleur modèle 4.mode: l'un des {auto, min, max} est sélectionné 5.save_weights_only: Si True, les poids du modèle seront enregistrés. Sinon, le modèle entier sera enregistré. 6.période: Intervalle entre les points de contrôle (nombre d'époques)

3.2. Premier apprentissage → Enregistrer les résultats intermédiaires sur Google Drive

Écrivez le code dans le cas de MNIST de Keras.

python


from tensorflow.keras.callbacks import ModelCheckpoint
from tensorflow.keras.datasets import mnist

Google Drive Mount, paramètres du dossier d'enregistrement du modèle

python


from google.colab import drive
drive.mount('/content/drive')

MODEL_DIR = "/content/drive/My Drive/temp"

if not os.path.exists(MODEL_DIR):  #Si le répertoire n'existe pas, créez-le.
    os.makedirs(MODEL_DIR)
checkpoint = ModelCheckpoint(
    filepath=os.path.join(MODEL_DIR, "model-{epoch:02d}.h5"), save_best_only=True) 

Exécution d'apprentissage

python



history = model.fit(Xtrain, Ytrain, batch_size=BATCH_SIZE, epochs=NUM_EPOCHS,  validation_split=0.1, callbacks=[checkpoint])

image.png image.png

L'exécution du code ci-dessus enregistrera le fichier de modèle dans le dossier temporaire. image.png

3.3. Deuxième apprentissage → Appelez le premier modèle et recommencez l'apprentissage à partir du milieu

Il commence par appeler model-05.h5.

Modèle de charge

python


#Modèle de charge
model.load_weights(os.path.join(MODEL_DIR, "model-05.h5"))  #Spécifiez le modèle de

Renommé le deuxième modèle de formation

Remplacez model-XX.h par model_new-XX.h.

python


if not os.path.exists(MODEL_DIR):  #Si le répertoire n'existe pas, créez-le.
    os.makedirs(MODEL_DIR)
checkpoint = ModelCheckpoint(
    filepath=os.path.join(MODEL_DIR, "model_new-{epoch:02d}.h5"), 
    monitor = 'loss',
    save_best_only=True,
    mode='min',
    period=1) 

Poursuivre l'exécution de l'apprentissage

python



history = model.fit(Xtrain, Ytrain, batch_size=BATCH_SIZE, epochs=NUM_EPOCHS,  validation_split=0.1, callbacks=[checkpoint])

En regardant la valeur de Training acc, nous pouvons voir que la formation a repris depuis que la dernière formation a été achevée.

image.png image.png

Le modèle nouvellement formé est également enregistré. image.png

4. Résumé

  1. Il y a un problème avec Google Colab Pro qui a été déconnecté pendant 24 heures.
  2. J'ai décidé de résoudre ce problème avec ModelCheckpoint () de Keras et le support Google Drive.
  3. Nous avons confirmé le fonctionnement et l'efficacité de la méthode proposée.

4. Code général

Première étude

python


from tensorflow.keras.callbacks import ModelCheckpoint
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras.utils import to_categorical
import os
import matplotlib.pyplot as plt

from google.colab import drive
drive.mount('/content/drive')
MODEL_DIR = "/content/drive/My Drive/temp"
if not os.path.exists(MODEL_DIR):  #Si le répertoire n'existe pas, créez-le.
    os.makedirs(MODEL_DIR)
checkpoint = ModelCheckpoint(
    filepath=os.path.join(MODEL_DIR, "model-{epoch:02d}.h5"), save_best_only=True) 

BATCH_SIZE = 128
NUM_EPOCHS = 20

(Xtrain, ytrain), (Xtest, ytest) = mnist.load_data()
Xtrain = Xtrain.reshape(60000, 784).astype("float32") / 255
Xtest = Xtest.reshape(10000, 784).astype("float32") / 255
Ytrain = to_categorical(ytrain, 10)
Ytest = to_categorical(ytest, 10)
print(Xtrain.shape, Xtest.shape, Ytrain.shape, Ytest.shape)
#Définition du modèle
model = Sequential()
model.add(Dense(512, input_shape=(784,), activation="relu"))
model.add(Dropout(0.2))
model.add(Dense(512, activation="relu"))
model.add(Dropout(0.2))
model.add(Dense(10, activation="softmax"))
model.summary()
model.compile(optimizer="rmsprop", loss="categorical_crossentropy",
              metrics=["accuracy"])

#Exécution de l'apprentissage
history = model.fit(Xtrain, Ytrain, batch_size=BATCH_SIZE, epochs=NUM_EPOCHS,  validation_split=0.1, callbacks=[checkpoint])

#Dessin graphique
plt.clf()
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']

plot_epochs = range(1, len(acc)+1)
# Accuracy
plt.plot(plot_epochs, acc, 'bo-', label='Training acc')
plt.plot(plot_epochs, val_acc, 'b', label='Validation acc')
plt.title('model accuracy')
plt.ylabel('accuracy')  #Étiquette de l'axe Y
plt.xlabel('epoch')  #Étiquette de l'axe X
plt.legend()
plt.show()

loss = history.history['loss']
val_loss = history.history['val_loss']

plot_epochs = range(1, len(loss)+1)
# Accuracy
plt.plot(plot_epochs, loss, 'ro-', label='Training loss')
plt.plot(plot_epochs, val_loss, 'r', label='Validation loss')
plt.title('model loss')
plt.ylabel('loss')  #Étiquette de l'axe Y
plt.xlabel('epoch')  #Étiquette de l'axe X
plt.legend()
plt.show()

Apprentissage secondaire et ultérieur

python


from tensorflow.keras.callbacks import ModelCheckpoint
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras.utils import to_categorical
import os
import matplotlib.pyplot as plt

from google.colab import drive
drive.mount('/content/drive')
MODEL_DIR = "/content/drive/My Drive/temp"
if not os.path.exists(MODEL_DIR):  #Si le répertoire n'existe pas, créez-le.
    os.makedirs(MODEL_DIR)
checkpoint = ModelCheckpoint(
    filepath=os.path.join(MODEL_DIR, "model-{epoch:02d}.h5"), save_best_only=True) 


#Modèle de charge
model.load_weights(os.path.join(MODEL_DIR, "model-05.h5"))  #Spécifiez le modèle de

if not os.path.exists(MODEL_DIR):  #Si le répertoire n'existe pas, créez-le.
    os.makedirs(MODEL_DIR)
checkpoint = ModelCheckpoint(
    filepath=os.path.join(MODEL_DIR, "model_new-{epoch:02d}.h5"), 
    monitor = 'loss',
    save_best_only=True,
    mode='min',
    period=1) 

#Reprendre l'apprentissage
history = model.fit(Xtrain, Ytrain, batch_size=BATCH_SIZE, epochs=NUM_EPOCHS,  validation_split=0.1, callbacks=[checkpoint])

#Dessin graphique
plt.clf()
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']

plot_epochs = range(1, len(acc)+1)
# Accuracy
plt.plot(plot_epochs, acc, 'bo-', label='Training acc')
plt.plot(plot_epochs, val_acc, 'b', label='Validation acc')
plt.title('model accuracy')
plt.ylabel('accuracy')  #Étiquette de l'axe Y
plt.xlabel('epoch')  #Étiquette de l'axe X
plt.legend()
plt.show()

loss = history.history['loss']
val_loss = history.history['val_loss']

plot_epochs = range(1, len(loss)+1)
# Accuracy
plt.plot(plot_epochs, loss, 'ro-', label='Training loss')
plt.plot(plot_epochs, val_loss, 'r', label='Validation loss')
plt.title('model loss')
plt.ylabel('loss')  #Étiquette de l'axe Y
plt.xlabel('epoch')  #Étiquette de l'axe X
plt.legend()
plt.show()


5. Documents de référence

  1. Organisez les conseils Google Colab
  2. [Comment interrompre l'apprentissage avec Keras puis le reprendre à partir du milieu](https://intellectual-curiosity.tokyo/2019/06/25/keras%e3%81%a7%e5%ad%a6%e7% bf% 92% e3% 82% 92% e4% b8% ad% e6% 96% ad% e3% 81% 97% e3% 81% 9f% e5% be% 8c% e3% 80% 81% e9% 80% 94% e4% b8% ad% e3% 81% 8b% e3% 82% 89% e5% 86% 8d% e9% 96% 8b% e3% 81% 99% e3% 82% 8b% e6% 96% b9% e6% b3% 95 /? unapproved = 1126 & moderation-hash = a1d80e5413be867d6179fd011c317d71 # comment-1126)
  3. Enregistrez le meilleur modèle (Comment utiliser ModelCheckpoint)

Recommended Posts

[Google Colab] Comment interrompre l'apprentissage, puis le reprendre
Comment afficher des vidéos en ligne dans Google Colab
Comment installer le détecteur Cascade et comment l'utiliser
"Alors, comment cela se compare-t-il aux autres méthodes?"
Comment exécuter AutoGluon dans un environnement GPU Google Colab
Comment utiliser Decorator dans Django et comment le créer
[TF] Comment enregistrer et charger les paramètres d'entraînement Tensorflow
Comment préparer l'environnement pour Google Colab avec le cours avancé d'apprentissage automatique de Coursera
Comment dessiner de manière interactive un pipeline d'apprentissage automatique avec scikit-learn et l'enregistrer au format HTML
À propos de l'apprentissage avec Google Colab
[Pepper] Comment l'utiliser?
Obtenez une adresse IP globale et exportez-la vers des feuilles de calcul Google
Comment convertir Youtube en mp3 et le télécharger en toute sécurité [Python]
Apprentissage en profondeur avec Shogi AI sur Mac et Google Colab
Vue d'ensemble de l'environnement virtuel Python et comment le créer
Comment utiliser Google Colaboratory
[Pour les débutants] Comment implémenter l'exemple de code O'reilly dans Google Colab
Comment mettre à jour automatiquement la description de l'App Store dans Google Spreadsheets et Fastlane
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 11
Comment installer OpenCV sur Cloud9 et l'exécuter en Python
Apprentissage en profondeur avec Shogi AI sur Mac et Google Colab Chapitres 1 à 6
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 7
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 10 6-9
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 10
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 7 5-7
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 9
Comment utiliser Google Colaboratory et exemple d'utilisation (PyTorch × DCGAN)
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 1-2
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3
La meilleure façon d'utiliser MeCab et CaboCha avec Google Colab
[Renforcer l'apprentissage] Comment dessiner OpenAI Gym sur Google Corab (version 2020.6)
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3 ~ 5
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 7 9
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 8 5-9
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 8 1-4
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 7 8
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 7 1-4
[Rails] Comment afficher Google Map
Comment installer et utiliser Tesseract-OCR
[Mémo] Comment utiliser Google MµG
Comment installer et configurer Blackbird
Comment utiliser .bash_profile et .bashrc
Comment installer et utiliser Graphviz
Sélénium et python pour ouvrir Google
Comment collecter des données d'apprentissage automatique
Résoudre des puzzles et 15 puzzles
Comment copier et coller le contenu d'une feuille au format JSON avec une feuille de calcul Google (en utilisant Google Colab)
[Rails] google maps api Comment publier et afficher des informations cartographiques
Comment rendre le nom du conteneur accessible dans Docker en tant que sous-domaine
N'hésitez pas à frapper 100 sciences des données avec Google Colab et Azure Notebooks!
Comment utiliser VS Code (serveur de code) avec Google Colab en seulement 3 lignes
Apprenez avec Shogi AI Deep Learning sur Mac et Google Colab Utilisez Google Colab
Apprentissage en profondeur sur Mac et Google Colab mots appris avec Shogi AI
[Rails] Comment calculer la latitude et la longitude avec une grande précision à l'aide de l'API Geocoding et l'afficher sur Google Map
[Linux] Comment subdiviser des fichiers et des dossiers