Ich werde darüber schreiben, wie Colab nur als externe GPU-Umgebung und nicht als Editor verwendet wird.
Für MACs, die Cuda (GPU) nicht verwenden können, ist Google Colaboratory eine der netten Optionen, hat aber auch Nachteile.
――So verschieben Sie die Datei nach dem Codieren auf dem lokalen Computer nach Colab und lassen Sie Colab sie nur auf der GPU ausführen. ――Für Projekte, die eine lange Berechnungszeit erfordern, ist das Hochladen der Datei selbst nicht so aufwändig und daher überraschend effektiv.
from google.colab import drive
drive.mount('/content/drive')
Die Google Drive-Ordner werden wie unten gezeigt im linken Bereich angezeigt.
import os
os.chdir('/content/drive/My Drive/colab/face_detection/')
Alternativ können Sie in der Befehlszeile Folgendes ausführen: (Beachten Sie, dass Sie, wenn Sie "cd" in der Colab-Befehlszeile verwenden, "%" hinzufügen und den Pfad in Anführungszeichen setzen müssen.)
%cd "content/drive/My drive/colab/face_detection/"
Wenn Sie es überprüfen, wurde es ordnungsgemäß geändert.
!pwd
/content/drive/My Drive/colab/face_age_detection
Führen Sie die Python-Datei aus.
!python main.py
Ich habe es im Keras-Projekt versucht, das Gesichtsausdrücke erkennt. (Wenn Sie auf dem Colab-Bildschirm auf die .py-Datei doppelklicken, wird der Editor-Bildschirm auf der rechten Seite angezeigt, sodass Sie den Quellcode direkt bearbeiten können.) Bei diesem Projekt gibt es ungefähr 20.000 100 * 100 Bilder, Conv hat 3 Ebenen, Dense hat 2 Ebenen und es ist eine etwas schwere Verarbeitung.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import os, zipfile, io, re
from PIL import Image
from sklearn.model_selection import train_test_split
import tensorflow.keras
from tensorflow.keras.models import Sequential, Model, load_model
from tensorflow.keras.layers import Conv2D, MaxPooling2D
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten
from tensorflow.keras.layers import GlobalAveragePooling2D
from tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau
from tensorflow.keras.preprocessing.image import ImageDataGenerator
image_size = 100
X = np.load("data/X_data.npy" )
Y = np.load("data/Y_data.npy")
X_train, X_test, y_train, y_test = train_test_split(
X,
Y,
random_state = 0, #Zufälliger Samen. Wenn es 0 ist, ist es jedes Mal zufällig. Konstanter Zufall, wenn mit einer ganzen Zahl gesetzt.
test_size = 0.2
)
X_train = X_train.astype('float32') / 255
X_test = X_test.astype('float32') / 255
X_train, X_val, y_train, y_val = train_test_split(
X_train,
y_train,
random_state = 0, #Die Reihenfolge der Daten wird gemischt.
test_size = 0.2
)
def create_model(X, y):
model = Sequential()
model.add(Conv2D(32, (3, 3), padding='same',input_shape=X.shape[1:], activation='relu'))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3), padding='same', activation='relu'))
model.add(Flatten()) #In einen eindimensionalen Vektor konvertieren
model.add(Dense(64, activation='relu'))
model.add(Dense(1))
model.compile(loss='mse',optimizer='Adam',metrics=['mae'])
return model
#Funktionen zur Visualisierung des Lernprozesses
def plot_history(history):
plt.plot(history.history['loss'],"o-",label="loss",)
plt.plot(history.history['val_loss'],"o-",label="val_loss")
plt.title('model loss')
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(loc='upper right')
plt.show()
# Data Augmentation
datagen = ImageDataGenerator(
featurewise_center = False,
samplewise_center = False,
featurewise_std_normalization = False,
samplewise_std_normalization = False,
zca_whitening = False,
rotation_range = 0,
width_shift_range = 0.1,
height_shift_range = 0.1,
horizontal_flip = True,
vertical_flip = False
)
# EarlyStopping
early_stopping = EarlyStopping(
monitor = 'val_loss',
patience = 10,
verbose = 1
)
# reduce learning rate
reduce_lr = ReduceLROnPlateau(
monitor = 'val_loss',
factor = 0.1,
patience = 3,
verbose = 1
)
model = create_model(X_train, y_train)
history = model.fit_generator(
datagen.flow(X_train, y_train, batch_size = 128),
steps_per_epoch = X_train.shape[0] // 128,
epochs = 50,
validation_data = (X_val, y_val),
callbacks = [early_stopping, reduce_lr],
shuffle = True,
verbose = 1)
model.save('age_prediction.hdf5')
plot_history(history)
model = load_model('age_prediction.hdf5')
preds=model.predict(X_test[0:30])
plt.figure(figsize=(16, 6))
for i in range(30):
plt.subplot(3, 10, i+1)
plt.axis("off")
pred = round(preds[i][0],1)
true = y_test[i]
if abs(pred - true) < 3.0:
plt.title(str(true) + '\n' + str(pred))
else:
plt.title(str(true) + '\n' + str(pred), color = "red")
plt.imshow(X_test[i])
plt.show()
Wenn ich es tatsächlich laufen lasse,
Lokale Maschine(CPU 2.4Ghz 8-Core Core i9)116 Minuten
Colab(GPU)28 Minuten
Es war ungefähr das 2,5-fache der Leistung der CPU.
Recommended Posts