CNTK - Training des Neuronalen Netzes

Hier werden wir das Training des Neuronalen Netzes in CNTK verstehen.

Ein Modell in CNTK trainieren

Im vorherigen Abschnitt haben wir alle Komponenten für das Deep-Learning-Modell definiert. Jetzt ist es Zeit, es zu trainieren. Wie bereits erwähnt, können wir ein NN-Modell in CNTK mithilfe der Kombination von trainierenlearner und trainer.

Auswahl eines Lernenden und Aufbau eines Trainings

In diesem Abschnitt definieren wir die learner. CNTK bietet mehrerelearnerswählen von. Für unser Modell, das in den vorherigen Abschnitten definiert wurde, werden wir verwendenStochastic Gradient Descent (SGD) learner.

Um das neuronale Netzwerk zu trainieren, konfigurieren wir das learner und trainer mit Hilfe der folgenden Schritte -

Step 1 - Zuerst müssen wir importieren sgd Funktion von cntk.lerners Paket.

from cntk.learners import sgd

Step 2 - Als nächstes müssen wir importieren Trainer Funktion von cntk.train.trainer Paket.

from cntk.train.trainer import Trainer

Step 3 - Jetzt müssen wir eine erstellen learner. Es kann durch Aufrufen erstellt werdensgd Funktion zusammen mit der Bereitstellung der Modellparameter und eines Werts für die Lernrate.

learner = sgd(z.parametrs, 0.01)

Step 4 - Endlich müssen wir das initialisieren trainer. Es muss das Netzwerk bereitgestellt werden, die Kombination derloss und metric zusammen mit learner.

trainer = Trainer(z, (loss, error_rate), [learner])

Die Lernrate, die die Optimierungsgeschwindigkeit steuert, sollte eine kleine Zahl zwischen 0,1 und 0,001 sein.

Auswahl eines Lernenden und Einrichtung des Trainings - Vollständiges Beispiel

from cntk.learners import sgd
from cntk.train.trainer import Trainer
learner = sgd(z.parametrs, 0.01)
trainer = Trainer(z, (loss, error_rate), [learner])

Daten in den Trainer einspeisen

Sobald wir den Trainer ausgewählt und konfiguriert haben, ist es Zeit, den Datensatz zu laden. Wir haben das gerettetiris Datensatz als.CSV Datei und wir werden Data Wrangling-Paket mit dem Namen verwenden pandas um den Datensatz zu laden.

Schritte zum Laden des Datasets aus der CSV-Datei

Step 1 - Zuerst müssen wir die importieren pandas Paket.

from import pandas as pd

Step 2 - Jetzt müssen wir die benannte Funktion aufrufen read_csv Funktion zum Laden der CSV-Datei von der Festplatte.

df_source = pd.read_csv(‘iris.csv’, names = [‘sepal_length’, ‘sepal_width’, 
‘petal_length’, ‘petal_width’, index_col=False)

Sobald wir das Dataset geladen haben, müssen wir es in eine Reihe von Features und eine Beschriftung aufteilen.

Schritte zum Aufteilen des Datensatzes in Features und Beschriftung

Step 1- Zuerst müssen wir alle Zeilen und die ersten vier Spalten aus dem Datensatz auswählen. Dies kann mit erfolgeniloc Funktion.

x = df_source.iloc[:, :4].values

Step 2- Als nächstes müssen wir die Speziesspalte aus dem Iris-Datensatz auswählen. Wir werden die Eigenschaft values ​​verwenden, um auf den Basiswert zuzugreifennumpy Array.

x = df_source[‘species’].values

Schritte zum Codieren der Speziesspalte in eine numerische Vektordarstellung

Wie bereits erwähnt, basiert unser Modell auf der Klassifizierung und erfordert numerische Eingabewerte. Daher müssen wir hier die Speziesspalte in eine numerische Vektordarstellung codieren. Schauen wir uns die Schritte dazu an -

Step 1- Zuerst müssen wir einen Listenausdruck erstellen, um alle Elemente im Array zu durchlaufen. Führen Sie dann für jeden Wert eine Suche im label_mapping-Wörterbuch durch.

label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}

Step 2- Konvertieren Sie als Nächstes diesen konvertierten numerischen Wert in einen One-Hot-codierten Vektor. Wir werden verwendenone_hot Funktion wie folgt -

def one_hot(index, length):
result = np.zeros(length)
result[index] = 1
return result

Step 3 - Endlich müssen wir diese konvertierte Liste in eine verwandeln numpy Array.

y = np.array([one_hot(label_mapping[v], 3) for v in y])

Schritte zum Erkennen einer Überanpassung

Die Situation, in der sich Ihr Modell an Muster erinnert, aber keine Regeln aus den Trainingsmustern ableiten kann, ist überpassend. Mithilfe der folgenden Schritte können wir eine Überanpassung unseres Modells feststellen -

Step 1 - Erstens von sklearn Paket, importieren Sie die train_test_split Funktion von der model_selection Modul.

from sklearn.model_selection import train_test_split

Step 2 - Als nächstes müssen wir die Funktion train_test_split mit den Features x und den Bezeichnungen y wie folgt aufrufen. -

x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0-2, 
stratify=y)

Wir haben eine Testgröße von 0,2 angegeben, um 20% der Gesamtdaten zu reservieren.

label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}

Schritte zum Füttern des Trainingssatzes und des Validierungssatzes für unser Modell

Step 1 - Um unser Modell zu trainieren, werden wir zuerst das aufrufen train_minibatchMethode. Geben Sie ihm dann ein Wörterbuch, das die Eingabedaten der Eingabevariablen zuordnet, mit der wir den NN und die zugehörige Verlustfunktion definiert haben.

trainer.train_minibatch({ features: X_train, label: y_train})

Step 2 - Rufen Sie als nächstes an train_minibatch indem Sie die folgende for-Schleife verwenden -

for _epoch in range(10):
trainer.train_minbatch ({ feature: X_train, label: y_train})
print(‘Loss: {}, Acc: {}’.format(
trainer.previous_minibatch_loss_average,
trainer.previous_minibatch_evaluation_average))

Daten in den Trainer einspeisen - Vollständiges Beispiel

from import pandas as pd
df_source = pd.read_csv(‘iris.csv’, names = [‘sepal_length’, ‘sepal_width’, ‘petal_length’, ‘petal_width’, index_col=False)
x = df_source.iloc[:, :4].values
x = df_source[‘species’].values
label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
def one_hot(index, length):
result = np.zeros(length)
result[index] = 1
return result
y = np.array([one_hot(label_mapping[v], 3) for v in y])
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0-2, stratify=y)
label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
trainer.train_minibatch({ features: X_train, label: y_train})
for _epoch in range(10):
trainer.train_minbatch ({ feature: X_train, label: y_train})
print(‘Loss: {}, Acc: {}’.format(
trainer.previous_minibatch_loss_average,
trainer.previous_minibatch_evaluation_average))

Messung der Leistung von NN

Um unser NN-Modell zu optimieren, misst es bei jeder Datenübertragung durch den Trainer die Leistung des Modells anhand der Metrik, die wir für den Trainer konfiguriert haben. Eine solche Messung der Leistung des NN-Modells während des Trainings basiert auf Trainingsdaten. Andererseits müssen wir für eine vollständige Analyse der Modellleistung auch Testdaten verwenden.

Um die Leistung des Modells anhand der Testdaten zu messen, können wir das aufrufen test_minibatch Methode auf der trainer wie folgt -

trainer.test_minibatch({ features: X_test, label: y_test})

Vorhersage mit NN

Sobald Sie ein Deep-Learning-Modell trainiert haben, ist es am wichtigsten, anhand dieses Modells Vorhersagen zu treffen. Um eine Vorhersage aus dem oben trainierten NN zu treffen, können wir die gegebenen Schritte - befolgen

Step 1 - Zuerst müssen wir mit der folgenden Funktion einen zufälligen Gegenstand aus dem Testsatz auswählen -

np.random.choice

Step 2 - Als nächstes müssen wir die Probendaten aus dem Testsatz mit auswählen sample_index.

Step 3 - Um die numerische Ausgabe in die NN in eine tatsächliche Bezeichnung umzuwandeln, erstellen Sie jetzt eine invertierte Zuordnung.

Step 4 - Verwenden Sie nun die ausgewählte sampleDaten. Machen Sie eine Vorhersage, indem Sie das NN z als Funktion aufrufen.

Step 5- Sobald Sie die vorhergesagte Ausgabe erhalten haben, nehmen Sie den Index des Neurons mit dem höchsten Wert als vorhergesagten Wert. Dies kann mit dem erfolgennp.argmax Funktion von der numpy Paket.

Step 6 - Konvertieren Sie zuletzt den Indexwert mit inverted_mapping.

Vorhersage mit NN - Vollständiges Beispiel

sample_index = np.random.choice(X_test.shape[0])
sample = X_test[sample_index]
inverted_mapping = {
   1:’Iris-setosa’,
   2:’Iris-versicolor’,
   3:’Iris-virginica’
}
prediction = z(sample)
predicted_label = inverted_mapping[np.argmax(prediction)]
print(predicted_label)

Ausgabe

Nachdem Sie das oben genannte Deep-Learning-Modell trainiert und ausgeführt haben, erhalten Sie die folgende Ausgabe:

Iris-versicolor