CNTK - Creazione della prima rete neurale
Questo capitolo approfondirà la creazione di una rete neurale in CNTK.
Costruisci la struttura della rete
Al fine di applicare i concetti CNTK per costruire il nostro primo NN, useremo NN per classificare le specie di fiori di iris in base alle proprietà fisiche di larghezza e lunghezza dei sepali e larghezza e lunghezza dei petali. Il set di dati che utilizzeremo per il set di dati dell'iride che descrive le proprietà fisiche di diverse varietà di fiori di iris -
- Lunghezza sepale
- Larghezza del sepalo
- Lunghezza del petalo
- Larghezza del petalo
- Classe ie iris setosa o iris versicolor o iris virginica
Qui costruiremo un normale NN chiamato feedforward NN. Vediamo le fasi di implementazione per costruire la struttura di NN -
Step 1 - Innanzitutto, importeremo i componenti necessari come i nostri tipi di layer, le funzioni di attivazione e una funzione che ci consente di definire una variabile di input per il nostro NN, dalla libreria CNTK.
from cntk import default_options, input_variable
from cntk.layers import Dense, Sequential
from cntk.ops import log_softmax, relu
Step 2- Dopodiché, creeremo il nostro modello utilizzando la funzione sequenziale. Una volta creato, lo nutriremo con i livelli che vogliamo. Qui creeremo due livelli distinti nel nostro NN; uno con quattro neuroni e un altro con tre neuroni.
model = Sequential([Dense(4, activation=relu), Dense(3, activation=log_sogtmax)])
Step 3- Infine, per compilare l'NN, legheremo la rete alla variabile di input. Ha uno strato di input con quattro neuroni e uno strato di output con tre neuroni.
feature= input_variable(4)
z = model(feature)
Applicazione di una funzione di attivazione
Ci sono molte funzioni di attivazione tra cui scegliere e scegliere la giusta funzione di attivazione farà sicuramente una grande differenza per le prestazioni del nostro modello di deep learning.
A livello di output
Scegliere un file activation la funzione al livello di output dipenderà dal tipo di problema che risolveremo con il nostro modello.
Per un problema di regressione, dovremmo usare a linear activation function sul livello di output.
Per un problema di classificazione binaria, dovremmo usare un file sigmoid activation function sul livello di output.
Per il problema di classificazione multi-classe, dovremmo usare un file softmax activation function sul livello di output.
Qui costruiremo un modello per prevedere una delle tre classi. Significa che dobbiamo usaresoftmax activation function a livello di output.
Allo strato nascosto
Scegliere un file activation la funzione a livello nascosto richiede alcuni esperimenti per monitorare le prestazioni per vedere quale funzione di attivazione funziona bene.
In un problema di classificazione, dobbiamo prevedere la probabilità che un campione appartenga a una classe specifica. Ecco perché abbiamo bisogno di un fileactivation functionche ci fornisce valori probabilistici. Per raggiungere questo obiettivo,sigmoid activation function può aiutarci.
Uno dei principali problemi associati alla funzione sigmoidea è il problema del gradiente di fuga. Per superare questo problema, possiamo usareReLU activation function che converte tutti i valori negativi a zero e funziona come un filtro passante per i valori positivi.
Scegliere una funzione di perdita
Una volta che abbiamo la struttura per il nostro modello NN, dobbiamo ottimizzarla. Per ottimizzare abbiamo bisogno di un fileloss function. diversamente daactivation functions, abbiamo molto meno funzioni di perdita tra cui scegliere. Tuttavia, la scelta di una funzione di perdita dipenderà dal tipo di problema che risolveremo con il nostro modello.
Ad esempio, in un problema di classificazione, dovremmo utilizzare una funzione di perdita in grado di misurare la differenza tra una classe prevista e una classe effettiva.
funzione di perdita
Per il problema di classificazione, risolveremo con il nostro modello NN, categorical cross entropyla funzione di perdita è il miglior candidato. In CNTK, è implementato comecross_entropy_with_softmax che può essere importato da cntk.losses pacchetto, come segue -
label= input_variable(3)
loss = cross_entropy_with_softmax(z, label)
Metrica
Avendo la struttura per il nostro modello NN e una funzione di perdita da applicare, abbiamo tutti gli ingredienti per iniziare a creare la ricetta per l'ottimizzazione del nostro modello di apprendimento profondo. Ma, prima di approfondire questo argomento, dovremmo conoscere le metriche.
cntk.metrics
CNTK ha il pacchetto denominato cntk.metricsda cui possiamo importare le metriche che utilizzeremo. Poiché stiamo costruendo un modello di classificazione, utilizzeremoclassification_error matric che produrrà un numero compreso tra 0 e 1. Il numero tra 0 e 1 indica la percentuale di campioni correttamente prevista -
Innanzitutto, dobbiamo importare la metrica da cntk.metrics pacchetto -
from cntk.metrics import classification_error
error_rate = classification_error(z, label)
La funzione sopra ha effettivamente bisogno dell'output di NN e dell'etichetta prevista come input.