CNTK - Addestramento della rete neurale

Qui capiremo come addestrare la rete neurale in CNTK.

Formazione di un modello in CNTK

Nella sezione precedente, abbiamo definito tutti i componenti per il modello di deep learning. Ora è il momento di addestrarlo. Come abbiamo discusso in precedenza, possiamo addestrare un modello NN in CNTK utilizzando la combinazione dilearner e trainer.

Scegliere uno studente e impostare la formazione

In questa sezione, definiremo il file learner. CNTK ne fornisce diversilearnersscegliere da. Per il nostro modello, definito nelle sezioni precedenti, useremoStochastic Gradient Descent (SGD) learner.

Per addestrare la rete neurale, configuriamo il file learner e trainer con l'aiuto dei seguenti passaggi:

Step 1 - Innanzitutto, dobbiamo importare sgd funzione da cntk.lerners pacchetto.

from cntk.learners import sgd

Step 2 - Successivamente, dobbiamo importare Trainer funzione da cntk.trainpacchetto .trainer.

from cntk.train.trainer import Trainer

Step 3 - Ora, dobbiamo creare un file learner. Può essere creato invocandosgd funzione insieme a fornire i parametri del modello e un valore per il tasso di apprendimento.

learner = sgd(z.parametrs, 0.01)

Step 4 - Infine, dobbiamo inizializzare il file trainer. Deve essere fornita la rete, la combinazione diloss e metric insieme con il learner.

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

Il tasso di apprendimento che controlla la velocità di ottimizzazione dovrebbe essere un numero piccolo compreso tra 0,1 e 0,001.

Scegliere uno studente e impostare la formazione - Esempio completo

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

Inserimento dei dati nel trainer

Una volta scelto e configurato il trainer, è il momento di caricare il set di dati. Abbiamo salvato il fileiris set di dati come file.CSV file e useremo il pacchetto di data wrangling denominato pandas per caricare il set di dati.

Passaggi per caricare il set di dati dal file .CSV

Step 1 - Per prima cosa, dobbiamo importare il file pandas pacchetto.

from import pandas as pd

Step 2 - Ora, dobbiamo richiamare la funzione denominata read_csv funzione per caricare il file .csv dal disco.

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

Una volta caricato il set di dati, dobbiamo dividerlo in un insieme di funzionalità e un'etichetta.

Passaggi per dividere il set di dati in caratteristiche ed etichette

Step 1- Innanzitutto, dobbiamo selezionare tutte le righe e le prime quattro colonne dal set di dati. Può essere fatto usandoiloc funzione.

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

Step 2- Successivamente dobbiamo selezionare la colonna delle specie dal set di dati dell'iride. Useremo la proprietà values ​​per accedere al sottostantenumpy Vettore.

x = df_source[‘species’].values

Passaggi per codificare la colonna delle specie in una rappresentazione vettoriale numerica

Come abbiamo discusso in precedenza, il nostro modello è basato sulla classificazione, richiede valori di input numerici. Quindi, qui abbiamo bisogno di codificare la colonna delle specie in una rappresentazione vettoriale numerica. Vediamo i passaggi per farlo -

Step 1- Innanzitutto, dobbiamo creare un'espressione di elenco per iterare su tutti gli elementi dell'array. Quindi eseguire una ricerca nel dizionario label_mapping per ogni valore.

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

Step 2- Successivamente, converti questo valore numerico convertito in un vettore codificato a caldo. Useremoone_hot funzionare come segue:

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

Step 3 - Infine, dobbiamo trasformare questo elenco convertito in un file numpy Vettore.

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

Passaggi per rilevare l'overfitting

La situazione, quando il tuo modello ricorda i campioni ma non è in grado di dedurre regole dai campioni di addestramento, è overfitting. Con l'aiuto dei seguenti passaggi, possiamo rilevare l'overfitting sul nostro modello:

Step 1 - Primo, da sklearn pacchetto, importa il file train_test_split funzione dal model_selection modulo.

from sklearn.model_selection import train_test_split

Step 2 - Successivamente, dobbiamo richiamare la funzione train_test_split con le caratteristiche x ed etichette y come segue -

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

Abbiamo specificato un test_size di 0.2 per mettere da parte il 20% dei dati totali.

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

Passaggi per alimentare il set di addestramento e il set di convalida per il nostro modello

Step 1 - Per addestrare il nostro modello, per prima cosa richiameremo il file train_minibatchmetodo. Quindi fornisci un dizionario che mappa i dati di input sulla variabile di input che abbiamo usato per definire l'NN e la sua funzione di perdita associata.

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

Step 2 - Avanti, chiama train_minibatch utilizzando il seguente ciclo for -

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))

Inserimento dei dati nel trainer - Esempio completo

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))

Misurare le prestazioni di NN

Al fine di ottimizzare il nostro modello NN, ogni volta che passiamo i dati attraverso il trainer, misura le prestazioni del modello attraverso la metrica che abbiamo configurato per il trainer. Tale misurazione delle prestazioni del modello NN durante l'addestramento si basa sui dati di addestramento. D'altro canto, per un'analisi completa delle prestazioni del modello è necessario utilizzare anche i dati di test.

Quindi, per misurare le prestazioni del modello utilizzando i dati del test, possiamo richiamare il file test_minibatch metodo sul trainer come segue -

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

Fare previsioni con NN

Dopo aver addestrato un modello di apprendimento profondo, la cosa più importante è fare previsioni utilizzando quello. Per fare previsioni dal NN addestrato sopra, possiamo seguire i passaggi indicati -

Step 1 - Innanzitutto, dobbiamo scegliere un elemento casuale dal set di test utilizzando la seguente funzione:

np.random.choice

Step 2 - Successivamente, è necessario selezionare i dati del campione dal set di test utilizzando sample_index.

Step 3 - Ora, per convertire l'output numerico nell'NN in un'etichetta effettiva, creare una mappatura invertita.

Step 4 - Ora, usa il selezionato sampledati. Fai una previsione invocando NN z come funzione.

Step 5- Ora, una volta ottenuto l'output previsto, prendi l'indice del neurone che ha il valore più alto come valore previsto. Può essere fatto usando ilnp.argmax funzione dal numpy pacchetto.

Step 6 - Infine, converti il ​​valore dell'indice nell'etichetta reale usando inverted_mapping.

Fare previsioni con NN - Esempio completo

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)

Produzione

Dopo aver addestrato il modello di deep learning sopra e averlo eseguito, otterrai il seguente output:

Iris-versicolor