Come visualizzare le architetture di rete neurale in Python

Una guida rapida per creare una rappresentazione schematica delle tue reti neurali utilizzando Jupyter o Google Colab

Credito immagine: sviluppato dall'autore utilizzando visualkeras e Jupyter Notebook.

Spesso, mentre lavoriamo con le reti neurali artificiali o altre varianti come le reti neurali a convoluzione o le reti neurali ricorrenti, desideriamo visualizzare e creare una rappresentazione schematica del nostro modello compilato. Questo può risolvere due scopi:

  1. Mentre definire e addestrare più modelli ci consente di visualizzare la profondità del nostro modello e confrontare diversi livelli e il modo in cui sono disposti in sequenza.
  2. Consente una migliore comprensione della struttura del modello, delle funzioni di attivazione utilizzate in ogni strato, della forma di ogni strato (numero di neuroni) e dei parametri che devono essere addestrati

Ci sono alcuni pacchetti prontamente disponibili in Python che possono creare una rappresentazione visiva dei nostri modelli di rete neurale. I primi tre pacchetti possono essere utilizzati anche prima che un modello venga addestrato (il modello deve solo essere definito e compilato); tuttavia, Tensor Boards richiede all'utente di addestrare il modello su dati accurati prima di poter visualizzare l'architettura.

  1. Visualizzatore NN
  2. Keras visivo
  3. Trama del modello Keras
  4. Scheda tensore
pip installa visualkeraspip installa ann_visualizerpip installa graphviz

Non è necessario installare separatamente la "Tensor Board" e il "Keras Model Plot". Ciò verrà fornito con l'installazione iniziale di Tensorflow e Keras.

Potremmo utilizzare solo alcune delle librerie elencate di seguito. La maggior parte delle librerie può convertire un modello TensorFlow in un diagramma senza addestrarlo esplicitamente sui dati. Puoi considerarlo come un'unica fonte di verità. Alcune librerie, come Pandas, Skimage e OpenCV, torneranno utili durante la lettura di dati strutturati o immagini.

# Importa le librerie necessarieimportare i panda come pdimporta numpy as np # Importa numpydai dati di importazione di skimage, io # Importa libreria skimage (dati - Immagini di prova e dati di esempio.# io - Lettura, salvataggio e visualizzazione di immagini.)da skimage.color importa rgb2grayimport matplotlib.pyplot as plt # Import matplotlib.pyplot (framework di stampa in Python.)%matplotlib in lineaimport os # Questo modulo fornisce un modo portabile di utilizzare le funzionalità dipendenti dal sistema operativo.os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'avvisi di importazione# Elimina gli avvisiwarnings.filterwarnings('ignora')dal display di importazione IPython.displayimporta cv2 come cv
da sklearn.metrics importa confusion_matrix
da sklearn.model_selection importa train_test_splitdalle utilità di importazione tensorflow.kerasda tensorflow.keras.models importa sequenziale,load_modelda tensorflow.keras.layers importa Dense, Dropout, Flatten, Conv2D, MaxPool2D, BatchNormalizationda tensorflow.keras.optimizers importa Adamimporta tensorflow come tfimporta seaborn come sns

Alcuni collegamenti utili per esplorare da zero più contenuti su ANN e CNN.

Definiremo tre diversi modelli CNN con diversi iperparametri. Idealmente, nel mondo reale, miriamo a implementare diverse architetture per massimizzare la precisione o qualsiasi metrica rilevante, considerando che stiamo costruendo il modello per un'attività di classificazione multicategoria. La nostra scelta del tipo di problema non avrà alcun impatto su come utilizzare i pacchetti di visualizzazione.

Abbiamo creato funzioni definite dall'utente per creare tre diversi modelli separatamente con un numero diverso di livelli CNN, pooling massimo e livelli densi.

4.1 – Architettura 1 — Strati CNN superficiali + strati ANN

def modello_costrutto():modello = Sequenziale()model.add(Conv2D(filtri=64, kernel_size=(3, 3), input_shape=(128, 128, 1), attivazione='relu'))model.add(Conv2D(filtri=64, dimensione_kernel=(3, 3), attivazione='relu'))modello.add(MaxPool2D((2, 2)))model.add(Appiattisci())model.add(Dense(256, attivazione='relu'))model.add(Dense(12, attivazione='softmax'))model.compile(loss='categorical_crossentropy', ottimizzatore='adam', metrics=['accuracy'])modello di restituzione

4.2 — Architettura 2 — CNN profonda + Strati ANN superficiali

def struttura_modello():smodel = Sequenziale()smodel.add(Conv2D(filtri=64, kernel_size=(3, 3), input_shape=(128, 128, 3), attivazione='relu'))smodel.add(Conv2D(filtri=64, dimensione_kernel=(3, 3), attivazione='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filtri=128, dimensione_kernel=(3, 3), attivazione='relu'))smodel.add(Conv2D(filtri=128, dimensione_kernel=(3, 3), attivazione='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filtri=128, dimensione_kernel=(3, 3), attivazione='relu'))smodel.add(Conv2D(filtri=128, dimensione_kernel=(3, 3), attivazione='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Appiattisci())smodel.add(Dense(256, attivazione='relu'))smodel.add(Dense(12, attivazione='softmax'))#ottimizzatore = Adam(lr=0.001)smodel.compile(loss='categorical_crossentropy', ottimizzatore='adam', metrics=['accuracy'])#model.summary()modello di restituzione

4.3 — Architettura 3 — Strati profondi di CNN e ANN

def cconstruct_model(tasso di apprendimento):smodel = Sequenziale()smodel.add(Conv2D(filtri=32, kernel_size=(3, 3), input_shape=(128, 128, 1), attivazione='relu'))smodel.add(Conv2D(filtri=32, dimensione_kernel=(3, 3), attivazione='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filtri=64, dimensione_kernel=(3, 3), attivazione='relu'))smodel.add(Conv2D(filtri=64, dimensione_kernel=(3, 3), attivazione='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filtri=128, dimensione_kernel=(3, 3), attivazione='relu'))smodel.add(Conv2D(filtri=128, dimensione_kernel=(3, 3), attivazione='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Appiattisci())smodel.add(Dense(256, attivazione='relu'))smodel.add(Dense(256, attivazione='relu'))smodel.add(Dense(12, attivazione='softmax'))ottimizzatore = Adam(lr=tasso di apprendimento)smodel.compile(loss='categorical_crossentropy', ottimizzatore=ottimizzatore, metrics=['accuratezza'])smodel.summary()modello di restituzionemodello=cconstruct_modello(0.001)

Un modulo Python denominato ANN Visualizer consente di visualizzare una rete neurale artificiale con poche righe di codice (Gheorghiu, 2022). Utilizza il modulo Graphviz di Keras e Python per produrre un grafico di rete neurale ordinato e accattivante. Hai la flessibilità di visualizzare l'intera rete di deep learning o solo la rete neurale convoluzionale che hai creato grazie ai progressi nel deep learning (Shah, 2018).

Utilizza la struttura seguente per generare una rappresentazione PDF della tua rete neurale. Tuttavia, prima di ciò, dobbiamo compilare i modelli di cui sopra.

modello=costruisci_modello()

ann_viz(model, view=True, filename=”network.gv”, title=”MyNeural Network”)

  • modello - Modello sequenziale di Keras
  • visualizzazione - Visualizza il grafico dopo che è stata chiamata ann_viz()
  • nome del file - Nome del file
  • titolo — Qualsiasi titolo specifico per denotare il grafico
da ann_visualizer.visualize importa ann_vizann_viz(model, view=True, filename=”cconstruct_model”, title=”CNN — Modello 1 — Architettura semplice”)
Figura 1: istantanea di build_model() creata utilizzando ANN Visualizer. Credito: immagine sviluppata dall'autore utilizzando Jupyter Notebook. l'output originale è troppo grande per adattarsi qui come immagine, quindi qui viene utilizzata un'istantanea degli strati inferiori.

Uno strumento Python chiamato Visualkeras semplifica la visualizzazione dei progetti di rete neurale Keras (separatamente o come parte di TensorFlow). La maggior parte delle esigenze di styling può essere soddisfatta con facilità. Le reti neurali convoluzionali (CNN) traggono notevoli vantaggi dallo sviluppo di architetture a strati. La maggior parte dei modelli, comprese le semplici reti feed-forward, traggono grandi benefici dalla generazione di un'architettura in stile grafico, supportata da questo modulo (Gavrikov, 2022).

modello1=costruisci_modello()modello2=sconstruct_modello()modello3=cconstruct_modello(0.009)importa visualkerasda PIL importa ImageFontvisualkeras.layered_view(model1, legend=True)visualkeras.layered_view(model2, legend=True)visualkeras.layered_view(model3, legend=True)
Figura 2. Illustra una rappresentazione schematica di tre diverse architetture di modelli. Credito: immagine sviluppata dall'autore utilizzando Jupyter Notebook.

I keras.utils.plot_model fornisce funzioni integrate per tracciare un modello definito e compilato tramite Keras utilizzando i pacchetti Graphviz e pydot. Graficamente è meno intuitivo dei pacchetti usati sopra, ma delinea l'architettura base di un modello sequenziale (Team, nd).

tf.keras.utils.plot_model(modello1,to_file="modello.png",show_shapes=Vero,show_dtype=Falso,show_layer_names=Vero,rangodir="TB",espanso_nidificato=Vero,dpi=96,layer_range=Nessuno,show_layer_activations=Vero,)

Pochi iperparametri da considerare:

  1. modello: Un'istanza del modello compilato Keras o dell'oggetto modello
  2. in_file: Nome file dell'immagine
  3. mostra_forme: visualizzare la dimensione e la forma di ogni strato nella rete neurale
  4. mostra_attivazione_livello: visualizzare le funzioni di attivazione utilizzate all'interno dei neuroni
Figura 3. Illustra l'output di tf.keras.utils.plot_model(). Credito: immagine sviluppata dall'autore utilizzando Jupyter Notebook.

TensorBoard è un'interfaccia dashboard che consente agli utenti di visualizzare i log nelle diverse esecuzioni del modello. I registri possono variare dal tracciamento di qualsiasi misura di convalida del modello come accuratezza, richiamo, RMSE, MAPE e MSE in epoche diverse alla creazione di un grafico concettuale dell'architettura del modello. Si tratta di uno strumento potente per visualizzare se il modello previsto corrisponde al progetto previsto e allo stesso tempo fornire informazioni su come modificare un modello utilizzando un grafico a livello operativo.

Per utilizzare questa funzionalità dobbiamo prima caricare TensorBoard e poi creare una directory di log.

%load_ext tensorboardda datetime import datetimeda tensorflow import keras# Definisce il callback Keras TensorBoard.logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

Crea il callback Keras TensorBoard e specifica la directory del log prima dell'addestramento. Puoi assicurarti che i dati del grafico vengano registrati per la visualizzazione TensorBoard fornendo questo callback a model.fit(). Una volta richiamato TensorBoard, il caricamento potrebbe richiedere alcuni minuti.

modello.fit(X2_treno, Y2_treno,dimensione_lotto=64,epoche=5,callbacks=[tensorboard_callback])

Nota: X2_train e Y2_train sono set di dati di addestramento non riflessi nei codici sopra. Puoi sostituirlo con qualsiasi dato di allenamento personalizzato.

TensorBoard mostra sempre il grafico a livello operativo per impostazione predefinita. (Il tag "Default" è evidenziato a sinistra.) Il grafico è capovolto rispetto al codice perché i dati fluiscono dal basso verso l'alto. Ma come puoi vedere, il grafico somiglia più o meno alla descrizione del modello Keras, con bordi aggiuntivi che portano ad altri nodi di calcolo (Tensorflow, 2022).

Figura 4. Illustra l'output di TensorBoard. Credito: immagine sviluppata dall'autore utilizzando Jupyter Notebook.

Ulteriori informazioni su come utilizzare TensorBoard sono disponibili nella sezione Riferimento.

Da un punto di vista commerciale, in cui un utente deve presentare la propria analisi a un gruppo di parti interessate, questi diagrammi aggiungono maggiore complessità alla discussione. Potrebbero non rappresentare un valore aggiunto estremo. Tuttavia, da una prospettiva accademica e di apprendimento, è utile utilizzare questi pacchetti per visualizzare queste architetture di deep learning. Il visualizzatore ANN, per me, si distingue dagli altri poiché è facile da digerire il diagramma, mentre l'output grafico di TensorBoard richiede più dettagli tecnici prima che i risultati possano essere consumati.

Gavrikov, P. (2022, 13 aprile). visualkeras per Keras/TensorFlow. GitHub. https://github.com/paulgavrikov/visualkeras

Gheorghiu, T. (2022, 21 ottobre). Visualizzatore NN. GitHub. https://github.com/RedaOps/ann-visualizer

Shah, A. (2018, 28 aprile). Visualizzazione di reti neurali artificiali (ANN) con una sola riga di codice. Medio. https://towardsdatascience.com/visualizing-artificial-neural-networks-anns-with-just-one-line-of-code-b4233607209e

Overflow dello stack. (nd). machine learning: come visualizzare le architetture di rete neurale? Scambio di stack di scienza dei dati. Estratto il 29 ottobre 2022 da https://datascience.stackexchange.com/questions/12851/how-do-you-visualize-neural-network-architectures

Squadra, K. (nd). Documentazione Keras: utilità per il disegno di modelli. Keras.io. Estratto il 29 ottobre 2022 da https://keras.io/api/utils/model_plotting_utils/#modeltodot-function

Tensorflusso. (2022 gennaio 6). Esaminando il grafico TensorFlow | TensorBoard. TensorFlow. https://www.tensorflow.org/tensorboard/graphs

Come visualizzare le architetture di rete neurale in Python Ripubblicato dalla fonte https://towardsdatascience.com/how-to-visualize-neural-network-architectures-in-python-567cd2aa6d62?source=rss—-7f60cf5620c9—4 tramite https:// versodatascience.com/feed

<!–

->

Timestamp:

Di più da Consulenti Blockchain