Hier finden Sie einige nützliche Tipps zur Verwendung von Google Colab.
Bei Verwendung von Google Colab Pro ist die Beschränkung auf bis zu 24 Stunden begrenzt. Wenn der Berechnungsaufwand des Modells 24 Stunden überschreitet, besteht daher das Problem, dass das Berechnungsergebnis in der Mitte verschwindet.
Wenn Sie beispielsweise schätzen, dass die Berechnung von 200 Epochen etwa 24 Stunden dauert und die Berechnung tatsächlich ausgeführt wird, dauert es einige Zeit, und Google Colab wird möglicherweise in der Nähe von 190 Epochen getrennt.
Um dies zu lösen, wenden wir die folgende Methode an.
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.Dateipfad: Der Pfad zum Speichern der Zeichenfolge und der Modelldatei 2. Monitor: Zu überwachender Wert 3. save_best_only: Wenn save_best_only = True, überschreiben die überwachten Daten nicht das neueste beste Modell 4.Modus: Einer von {auto, min, max} ist ausgewählt 5. save_weights_only: Wenn True, werden die Gewichte des Modells gespeichert. Andernfalls wird das gesamte Modell gespeichert. 6. Zeitraum: Intervall zwischen Kontrollpunkten (Anzahl der Epochen)
Schreiben Sie den Code für Keras 'MNIST.
python
from tensorflow.keras.callbacks import ModelCheckpoint
from tensorflow.keras.datasets import mnist
Google Drive Mount, Einstellungen für Modellspeicherordner
python
from google.colab import drive
drive.mount('/content/drive')
MODEL_DIR = "/content/drive/My Drive/temp"
if not os.path.exists(MODEL_DIR): #Wenn das Verzeichnis nicht vorhanden ist, erstellen Sie es.
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])
Wenn Sie den obigen Code ausführen, wird die Modelldatei im temporären Ordner gespeichert.
Es beginnt mit dem Aufruf von model-05.h5.
python
#Modell laden
model.load_weights(os.path.join(MODEL_DIR, "model-05.h5")) #Geben Sie das Modell von an
Ändern Sie model-XX.h in model_new-XX.h.
python
if not os.path.exists(MODEL_DIR): #Wenn das Verzeichnis nicht vorhanden ist, erstellen Sie es.
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])
Wenn wir uns den Wert von Training acc ansehen, können wir sehen, dass das Training seit Abschluss des letzten Trainings wieder aufgenommen wurde.
Das neu trainierte Modell wird ebenfalls gespeichert.
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): #Wenn das Verzeichnis nicht vorhanden ist, erstellen Sie es.
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)
#Modelldefinition
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"])
#Ausführung lernen
history = model.fit(Xtrain, Ytrain, batch_size=BATCH_SIZE, epochs=NUM_EPOCHS, validation_split=0.1, callbacks=[checkpoint])
#Diagrammzeichnung
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') #Beschriftung der Y-Achse
plt.xlabel('epoch') #X-Achsenbeschriftung
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') #Beschriftung der Y-Achse
plt.xlabel('epoch') #X-Achsenbeschriftung
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): #Wenn das Verzeichnis nicht vorhanden ist, erstellen Sie es.
os.makedirs(MODEL_DIR)
checkpoint = ModelCheckpoint(
filepath=os.path.join(MODEL_DIR, "model-{epoch:02d}.h5"), save_best_only=True)
#Modell laden
model.load_weights(os.path.join(MODEL_DIR, "model-05.h5")) #Geben Sie das Modell von an
if not os.path.exists(MODEL_DIR): #Wenn das Verzeichnis nicht vorhanden ist, erstellen Sie es.
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)
#Setzen Sie das Lernen fort
history = model.fit(Xtrain, Ytrain, batch_size=BATCH_SIZE, epochs=NUM_EPOCHS, validation_split=0.1, callbacks=[checkpoint])
#Diagrammzeichnung
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') #Beschriftung der Y-Achse
plt.xlabel('epoch') #X-Achsenbeschriftung
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') #Beschriftung der Y-Achse
plt.xlabel('epoch') #X-Achsenbeschriftung
plt.legend()
plt.show()
Recommended Posts