Questo articolo è stato pubblicato nell'ambito del Blogathon sulla scienza dei dati
In questo articolo, risponderemo a queste domande di base e costruiremo una rete neurale di base per eseguire la regressione lineare.
Cos'è una rete neurale?
L'unità di base del cervello è nota come neurone, ci sono circa 86 miliardi di neuroni nel nostro sistema nervoso che sono collegati a 10 ^ 14-10 ^ 15 sinapsi. meOgni neurone riceve un segnale dalle sinapsi e lo emette dopo aver elaborato il segnale.. Questa idea viene estratta dal cervello per costruire una rete neurale.
Ogni neurone realizza un prodotto scalare tra gli input e i pesi, aggiungere pregiudizi, applica una funzione di trigger ed emette le uscite. Quando un gran numero di neuroni sono presenti insieme per dare un gran numero di uscite, si forma uno strato neurale. Finalmente, più livelli si combinano per formare una rete neurale.
Architettura dei neuroni rossi
Le reti neurali si formano quando più strati neurali si combinano tra loro per dare una rete, oppure possiamo dire che ci sono dei layer i cui output sono input per altri layer.
Il tipo più comune di livello per costruire una rete neurale di base è il livello completamente connesso, in cui gli strati adiacenti sono completamente accoppiati e i neuroni a strato singolo non sono collegati tra loro.
Nella figura sopra, le reti neurali vengono utilizzate per classificare i punti dati in tre categorie.
Convenzioni di denominazione. Quando la rete neurale a strati N, non contiamo il livello di input. Perciò, una rete neurale a strato singolo descrive una rete senza strati nascosti (l'input è mappato direttamente sull'output). Nel caso del nostro codice, useremo una rete neurale a strato singolo, vale a dire, non abbiamo un livello nascosto.
Livello di output. A differenza di tutti i livelli in una rete neurale, i neuroni nello strato di output comunemente non hanno una funzione di scarica (oppure puoi pensare che abbiano una funzione di attivazione dell'identità lineare). Questo perché l'ultimo livello di output viene solitamente utilizzato per rappresentare i punteggi della classe (ad esempio, in classifica), che sono numeri arbitrari di valore reale o qualche tipo di obiettivo di valore reale (ad esempio, in regressione). Poiché stiamo eseguendo la regressione utilizzando un singolo livello, non abbiamo alcuna funzione di attivazione.
Dimensionamento della rete neurale. Le due metriche che le persone usano comunemente per misurare la dimensione delle reti neurali sono il numero di neuroni o, più comunemente, il numero di parametri.
Biblioteche
Useremo tre librerie di base per questo modello, insensibile, matplotlib e TensorFlow.
- Numpy: questo aggiunge il supporto per array e array di grandi dimensioni e multidimensionali, insieme a una vasta collezione di funzioni matematiche di alto livello. Nel nostro caso, genereremo dati con l'aiuto di Numpy.
- Matplotlib: questa è una libreria di plottaggio per Python, visualizzeremo i risultati finali utilizzando grafici in Matplotlib.
- Tensorflow: questa libreria si concentra in particolare sulla formazione e l'inferenza della rete neurale profonda. Possiamo importare direttamente i livelli e addestrare, funzioni di test senza dover scrivere l'intero programma.
importa numpy come np importa matplotlib.pyplot come plt import tensorflow come tf
Generazione di dati
Possiamo generare i nostri dati numerici per questo processo usando la funzione np.unifrom () che genera dati uniformi. Qui, stiamo usando due variabili di input xs e zs, aggiungendo un po' di rumore per randomizzare i punti dati e, Finalmente, la variabile target è definita come y = 2 * xs-3 * zs + 5 + rumore. La dimensione del set di dati è 1000.
osservazioni=1000 xs=np.random.uniform(-10,10,(osservazioni,1)) zs=np.random.uniform(-10,10,(osservazioni,1)) generate_inputs=np.column_stack((xs,zs)) noise=np.random.uniform(-10,10,(osservazioni,1)) target_generato=2*xs-3*zs+5+rumore
Dopo aver generato i dati, salvali in un file .npz, in modo che possano essere utilizzati per l'allenamento.
np. so('TF_intro',input=generated_inputs,target=bersaglio_generato) training_data=np.load('TF_intro.npz')
Il nostro obiettivo è ottenere i pesi finali il più vicino possibile ai pesi effettivi., vale a dire [2,-3].
Definire il modello
Qui, utilizzeremo lo strato denso di TensorFlow per creare il modello e importare la discesa del gradiente stocastico dall'ottimizzatore Keras.
Un gradiente è la pendenza di una funzione. Misura il grado di variazione di una variabile al variare di un'altra variabile. Matematicamente, la discesa del gradiente è una funzione convessa il cui output è la parziale derivazione di un insieme di parametri dai suoi input. Più alta è la pendenza, più ripida è la pendenza.
Partendo da un valore iniziale, Gradient Descent viene eseguito iterativamente per trovare i valori ottimali dei parametri per trovare il valore minimo possibile per la data funzione di costo. La parola “Stocastico” si riferisce a un sistema o processo di probabilità casuale. Perciò, en Discesa gradiente stocastico, alcuni campioni sono selezionati casualmente, invece del set di dati per ogni iterazione.
dato che, l'ingresso ha 2 variabili, dimensione dell'ingresso = 2 e dimensione di uscita = 1.
Impostiamo il tasso di apprendimento a 0.02, che non è né troppo alto né troppo basso, e il valore dell'epoca = 100.
input_size=2 output_size=1 modelli = tf.keras.Sequential([ tf.strati.duri.Densi(output_size) ]) custom_optimizer=tf.keras.optimizers.SGD(tasso_di apprendimento=0.02) modelli.compila(ottimizzatore=ottimizzatore_personalizzato,perdita="mean_squared_error") modelli.fit(training_data['ingresso'],training_data['obiettivi'],epoche=100,verbose=1)
Ottieni pesi e pregiudizi
Possiamo stampare i valori previsti di pesi e distorsioni e anche memorizzarli.
modelli.strati[0].get_pesi()
[Vettore([[ 1.3665189], [-3.1609795]], dtype=float32), Vettore([4.9344487], dtype=float32)]
Qui, la prima matrice rappresenta i pesi e la seconda matrice rappresenta i pregiudizi. Possiamo vedere chiaramente che i valori previsti dei pesi sono molto vicini al valore effettivo dei pesi..
pesi=modelli.strati[0].get_pesi()[0] bias=modelli.strati[0].get_pesi()[1]
Previsione e precisione
Dopo la previsione utilizzando i pesi e i pregiudizi dati, un punteggio RMSE finale di 0.02866, che è piuttosto basso.
RMSE è definito come la radice dell'errore quadratico medio. La radice dell'errore quadratico medio prende la differenza per ogni valore osservato e previsto. La formula per l'errore RMSE è data come:
https://www.google.com/search?q=rmse+formula&oq=RMSE+forma&aqs=cromo.0.0i433j0j69i57j0l7.4779j0j7&sourceid=chrome&cioè=UTF-8
|
|
||
|
|
||
|
|
||
|
|
out=training_data['obiettivi'].il giro(1) da sklearn.metrics import mean_squared_error mean_squared_error(generato_target, fuori, quadrato=Falso)
Se tracciamo i dati previsti su un grafico a dispersione, otteniamo un grafico come questo:
plt.scatter(np.squeeze(models.predict_on_batch(training_data['ingresso'])),np.squeeze(training_data['obiettivi']),c="#88c999") plt.xlabel('Ingresso') plt.ylabel('Uscita prevista') plt.mostra()
evviva! Il nostro modello è addestrato correttamente con pochissimi errori. Questa è la fine della tua prima rete neurale. Nota che ogni volta che addestriamo il modello possiamo ottenere un valore di precisione diverso, ma non differiranno molto.
Grazie per aver letto! Puoi contattarmi a [e-mail protetta]
Il supporto mostrato in questo articolo non è di proprietà di DataPeaker e viene utilizzato a discrezione dell'autore.