La combinazione di neuroni consente alle reti neurali di apprendere confini decisionali più complessi e non lineari I neuroni sono collegati tra loro secondo una specifica architettura di rete. Sebbene ci siano architetture diverse, quasi tutte contengono livelli. (NB: Neuroni nello stesso livello non collegare uno con l’altro)
Reti Neurali contengono Livelli
non C’è in genere un livello di input (contenente un numero di neuroni pari al numero di funzioni di immissione dati), un livello di output (contenente un numero di neuroni pari al numero delle classi) e uno strato nascosto (contenente un qualsiasi numero di neuroni).
Deep neural networks contenere più livelli nascosti
Ci possono essere più di uno strato nascosto per permettere la rete neurale per saperne di più complesso decisione confini (Qualsiasi rete neurale con più di uno strato nascosto è considerato un profondo rete neurale).
Consente di creare un NN profondo per dipingere questa immagine:
Un esempio di immagine che il nostro ANN imparare a dipingere (sarà imparare ad associare determinati colori per alcune regioni dell’immagine)
Permette di scaricare l’immagine e carica i pixel in un array
!curl -O https://pmcvariety.files.wordpress.com/2018/04/twitter-logo.jpg?w=100&h=100&crop=1from PIL import Image image = Image.open('twitter-logo.jpg?w=100')import numpy as np image_array = np.asarray(image)
insegnare ai nostri ANN a dipingere è un apprendimento supervisionato compito, quindi, abbiamo bisogno di creare un etichettati training set (la Nostra formazione dati di input e output previsto etichette per ogni ingresso). Gli input di allenamento avranno 2 valori (le coordinate x,y di ciascun pixel).
Data la semplicità dell’immagine, potremmo effettivamente affrontare questo problema in due modi. Un problema di classificazione (in cui la rete neurale predice se un pixel appartiene alla classe “blu” o alla classe “grigia”, date le sue coordinate xy) o un problema di regressione (in cui la rete neurale predice i valori RGB per un pixel date le sue coordinate).
Se si tratta di un problema di regressione: gli output di allenamento avranno 3 valori (i valori r,g,b normalizzati per ciascun pixel). – Consente di utilizzare questo metodo per ora.
training_inputs,training_outputs = , for row,rgbs in enumerate(image_array): for column,rgb in enumerate(rgbs): training_inputs.append((row,column)) r,g,b = rgb training_outputs.append((r/255,g/255,b/255))
Ora consente di creare il nostro ANN:
completamente connesso in rete neurale feed-forward (FFNN) — aka Un multi-layer perceptron (MLP)
Si dovrebbe avere 2 neuroni del livello di input (dato che ci sono 2 valori di prendere in: x & y coordinate).
Dovrebbe avere 3 neuroni nel livello di output (poiché ci sono 3 valori da imparare: r, g, b).
numero di livelli nascosti e il numero di neuroni in ogni livello nascosto sono due hyperparameters di sperimentare (così come il numero di epoche ci si allena per la funzione di attivazione, ecc) — io uso 10 livelli nascosti con 100 neuroni in ogni strato nascosto (rendendo questo un deep neural network)
from sklearn.neural_network import MLPRegressorann = MLPRegressor(hidden_layer_sizes= tuple(100 for _ in range(10)))ann.fit(training_inputs, training_outputs)
La rete addestrata può oggi prevedere normalizzato i valori rgb per ogni coordinate (ad esempio x,y = 1,1).
ann.predict(])
array(])
consente di utilizzare l’ANN per predire i valori rgb per ogni coordinata e permette di visualizzare il predetto valori rgb per l’intera immagine per vedere quanto bene ha fatto (qualitativamente — partiremo metriche di valutazione per un altro tutorial)
predicted_outputs = ann.predict(training_inputs)predicted_image_array = np.zeros_like(image_array) i = 0 for row,rgbs in enumerate(predicted_image_array): for column in range(len(rgbs)): r,g,b = predicted_outputs predicted_image_array = i += 1 Image.fromarray(predicted_image_array)
il Nostro ANN Pittura (previsto pixel colori)
Provare a cambiare il hyperparameters per ottenere risultati migliori.
Se invece di trattare questo come un problema di regressione, abbiamo trattare questo come un problema di classificazione, quindi la formazione uscite di 2 valori (la probabilità di pixel appartenenti ad ognuna delle due classi: “blu” e “grigie”)
training_inputs,training_outputs = , for row,rgbs in enumerate(image_array): for column,rgb in enumerate(rgbs): training_inputs.append((row,column)) if sum(rgb) <= 600: label = (0,1) #blue class else: label = (1,0) #grey class training_outputs.append(label)
Siamo in grado di ricostruire il nostro ANN come un classificatore binario con 2 neuroni del livello di input, 2 neuroni nello strato di output e 100 neuroni in strato nascosto (con 10 livelli nascosti)
from sklearn.neural_network import MLPClassifier ann = MLPClassifier(hidden_layer_sizes= tuple(100 for _ in range(10))) ann.fit(training_inputs, training_outputs)
E ‘ ora possibile utilizzare i formati ANN per predire la classe che ogni pixel appartiene (0: “grigio” o 1: “blu”). The argmax function is used to find which class has the highest probability
np.argmax(ann.predict(]))
(this indicates the pixel with xy-coordinates 1,1 is most likely from class 0: “grey”)
predicted_outputs = ann.predict(training_inputs)predicted_image_array = np.zeros_like(image_array) i = 0 for row,rgbs in enumerate(predicted_image_array): for column in range(len(rgbs)): prediction = np.argmax(predicted_outputs) if prediction == 0: predicted_image_array = else: predicted_image_array = i += 1 Image.fromarray(predicted_image_array)
The predicted class for each pixel
The expected class for each pixel