Voici quelques conseils utiles pour utiliser Google Colab.
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.
Pour résoudre ce problème, nous utiliserons la méthode suivante.
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)
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)
É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)
python
history = model.fit(Xtrain, Ytrain, batch_size=BATCH_SIZE, epochs=NUM_EPOCHS, validation_split=0.1, callbacks=[checkpoint])
L'exécution du code ci-dessus enregistrera le fichier de modèle dans le dossier temporaire.
Il commence par appeler model-05.h5.
python
#Modèle de charge
model.load_weights(os.path.join(MODEL_DIR, "model-05.h5")) #Spécifiez le modèle de
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)
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.
Le modèle nouvellement formé est également enregistré.
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()
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()
Recommended Posts