Come si visualizzano le architetture di reti neurali?


80

Quando si scrive un documento / si fa una presentazione su un argomento che riguarda le reti neurali, di solito si visualizza l'architettura delle reti.

Quali sono i modi buoni / semplici per visualizzare automaticamente le architetture comuni?




1
Ho scritto semplici diagrammi di reti neurali contorte con un sondaggio sugli approcci di visualizzazione di apprendimento profondo (sia manuale che automatico). Ho avuto molta ispirazione e collegamenti da questo thread - grazie!
Piotr Migdal,

Risposte:


25

Tensorflow, Keras, MXNet, PyTorch

Se la rete neurale viene fornita come grafico Tensorflow, è possibile visualizzare questo grafico con TensorBoard .

Ecco come appare la CNN MNIST:

inserisci qui la descrizione dell'immagine

Puoi aggiungere tu stesso nomi / ambiti (come "dropout", "softmax", "fc1", "conv1", "conv2").

Interpretazione

Quanto segue riguarda solo il grafico a sinistra. Ignoro i 4 piccoli grafici nella metà destra.

Ogni casella è un livello con parametri che possono essere appresi. Per deduzione, le informazioni scorrono dal basso verso l'alto. Le ellissi sono livelli che non contengono parametri appresi.

Il colore delle scatole non ha un significato.

Non sono sicuro del valore delle piccole caselle tratteggiate ("gradienti", "Adam", "salva").


è buono, sto cercando di evitare il nome come conv1, conv2 ecc., voglio fare tutto il nome di conv in seguito come CONV, come farò ??
Sudip Das,

+1. Non è solo per TF: MXNet e Pytorch hanno anche un po 'di supporto
Jakub Bartczuk,

@SudipDas Puoi aggiungere i nomi nel codice ai livelli, che verranno visualizzati mentre la traccia.
Ben

Come mostrerò il nome di ogni livello come "CONV", se lo scrivo come "CONV" di ogni livello, allora otterrò un errore, perché ogni livello dovrebbe avere un nome univoco come regole tf, MA voglio sapere, è c'è qualche altro modo per superare questo problema ?? @Ben
Sudip Das,

1
@onof Ho corretto il collegamento
Martin Thoma il

23

Di recente ho creato uno strumento per disegnare architetture NN ed esportare SVG, chiamato NN-SVG

inserisci qui la descrizione dell'immagine


1
Scarica SVG non funziona
immagine del

funziona per me il 23/01/19. Se il problema persiste, non esitare ad aprire un problema.
Alex Lenail,

1
questa è l'unica risposta giusta
ArtificiallyIntelligence

strumento fantastico. Tuttavia, ho notato che in stile AlexNet, le dimensioni dei Tensori erano rappresentate erroneamente (dimensioni di larghezza e altezza)
FlySoFast


11

Vorrei aggiungere visualizzazioni ASCII usando keras-sequential-ascii (disclaimer: sono l'autore).

Una piccola rete per CIFAR-10 (da questo tutorial ) sarebbe:

       OPERATION           DATA DIMENSIONS   WEIGHTS(N)   WEIGHTS(%)

           Input   #####     32   32    3
          Conv2D    \|/  -------------------       896     2.1%
            relu   #####     30   30   32
    MaxPooling2D   Y max -------------------         0     0.0%
                   #####     15   15   32
          Conv2D    \|/  -------------------     18496    43.6%
            relu   #####     13   13   64
    MaxPooling2D   Y max -------------------         0     0.0%
                   #####      6    6   64
         Flatten   ||||| -------------------         0     0.0%
                   #####        2304
           Dense   XXXXX -------------------     23050    54.3%
         softmax   #####          10

Per VGG16 sarebbe:

       OPERATION           DATA DIMENSIONS   WEIGHTS(N)   WEIGHTS(%)

          Input   #####      3  224  224
     InputLayer     |   -------------------         0     0.0%
                  #####      3  224  224
  Convolution2D    \|/  -------------------      1792     0.0%
           relu   #####     64  224  224
  Convolution2D    \|/  -------------------     36928     0.0%
           relu   #####     64  224  224
   MaxPooling2D   Y max -------------------         0     0.0%
                  #####     64  112  112
  Convolution2D    \|/  -------------------     73856     0.1%
           relu   #####    128  112  112
  Convolution2D    \|/  -------------------    147584     0.1%
           relu   #####    128  112  112
   MaxPooling2D   Y max -------------------         0     0.0%
                  #####    128   56   56
  Convolution2D    \|/  -------------------    295168     0.2%
           relu   #####    256   56   56
  Convolution2D    \|/  -------------------    590080     0.4%
           relu   #####    256   56   56
  Convolution2D    \|/  -------------------    590080     0.4%
           relu   #####    256   56   56
   MaxPooling2D   Y max -------------------         0     0.0%
                  #####    256   28   28
  Convolution2D    \|/  -------------------   1180160     0.9%
           relu   #####    512   28   28
  Convolution2D    \|/  -------------------   2359808     1.7%
           relu   #####    512   28   28
  Convolution2D    \|/  -------------------   2359808     1.7%
           relu   #####    512   28   28
   MaxPooling2D   Y max -------------------         0     0.0%
                  #####    512   14   14
  Convolution2D    \|/  -------------------   2359808     1.7%
           relu   #####    512   14   14
  Convolution2D    \|/  -------------------   2359808     1.7%
           relu   #####    512   14   14
  Convolution2D    \|/  -------------------   2359808     1.7%
           relu   #####    512   14   14
   MaxPooling2D   Y max -------------------         0     0.0%
                  #####    512    7    7
        Flatten   ||||| -------------------         0     0.0%
                  #####       25088
          Dense   XXXXX ------------------- 102764544    74.3%
           relu   #####        4096
          Dense   XXXXX -------------------  16781312    12.1%
           relu   #####        4096
          Dense   XXXXX -------------------   4097000     3.0%
        softmax   #####        1000

11

Esiste un progetto open source chiamato Netron

Netron è un visualizzatore di modelli di reti neurali, deep learning e machine learning.

Netron supporta ONNX (.onnx, .pb), Keras (.h5, .keras), CoreML (.mlmodel) e TensorFlow Lite (.tflite). Netron ha supporto sperimentale per Caffe (.caffemodel), Caffe2 (predict_net.pb), MXNet (-symbol.json), TensorFlow.js (model.json, .pb) e TensorFlow (.pb, .meta).

inserisci qui la descrizione dell'immagine



8

Keras

Il modulo keras.utils.vis_utils fornisce funzioni di utilità per tracciare un modello di Keras (usando graphviz)

Quanto segue mostra un modello di rete secondo cui il primo livello nascosto ha 50 neuroni e prevede 104 variabili di input.

plot_model(model, to_file='model.png', show_shapes=True, show_layer_names=True)

inserisci qui la descrizione dell'immagine


Posso usarlo in formato compatibile LaTex?
pushpen.paul

8

Il pacchetto Python conxpuò visualizzare reti con attivazioni con la funzione net.picture()di produrre immagini SVG, PNG o PIL come questa:

inserisci qui la descrizione dell'immagine

Conx è basato su Keras e può leggere nei modelli di Keras. La mappa dei colori di ogni banco può essere modificata e può mostrare tutti i tipi di banco.

Ulteriori informazioni sono disponibili all'indirizzo: http://conx.readthedocs.io/en/latest/


6

Ho lavorato su un visualizzatore di reti neurali drag-and-drop (e altro). Ecco un esempio di una visualizzazione per un'architettura simile a LeNet. Una visualizzazione di un'architettura simile a LeNet Anche i modelli con fan-out e fan-in sono modellati abbastanza facilmente. È possibile visitare il sito Web all'indirizzo https://math.mit.edu/ennui/


il mio browser continua a bloccarsi quando premo Train
datdinhquoc

1
Grazie per averlo verificato. Sì, questo bug è apparso di recente e sembra essere il risultato di alcune recenti modifiche a WebGL su Chrome. Tutto dovrebbe funzionare su Firefox. Ti aggiornerò quando ne saprò di più.
Jesse,

tks, il tuo visualizzatore è fantastico, sembra più grande di tf playground :)
datdinhquoc

1
Grazie! Fammi sapere se hai problemi o idee. Ci divertiamo anche con la generazione di codice!
Jesse,

5

In R, nnetnon viene fornita una funzione per la trama, ma qui viene fornito il codice per questo .

In alternativa, puoi usare il pacchetto più recente e IMHO migliore chiamato neuralnetche presenta una plot.neuralnetfunzione, quindi puoi semplicemente fare:

data(infert, package="datasets")
plot(neuralnet(case~parity+induced+spontaneous, infert))

neuralnet

neuralnetnon è usato tanto quanto nnetperché nnetè molto più vecchio e viene spedito con r-cran. Ma neuralnetha più algoritmi di addestramento, inclusa la backpropagation resiliente che manca anche in pacchetti come Tensorflow, ed è molto più robusto rispetto alle scelte dell'iperparametro e ha più funzioni in generale.


Devi aggiungere il link aggiornato per il codice di NNet in R beckmw.wordpress.com/2013/11/14/…
wacax,

4

Ci sono alcuni nuovi sforzi alternativi sulla visualizzazione della rete neurale.

Si prega di consultare questi articoli:

Le straordinarie "scansioni cerebrali dell'IA" rivelano ciò che le macchine vedono mentre apprendono nuove abilità

All'interno di un "cervello" di intelligenza artificiale - Che aspetto ha l'apprendimento automatico?

Questi approcci sono più orientati alla visualizzazione del funzionamento della rete neurale, tuttavia, l'architettura NN è anche in qualche modo visibile sui diagrammi risultanti.

Esempi:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


21
Per favore, spiega cosa vediamo qui. Sembra bello, ma non capisco come le fantasiose immagini supportino la comprensione del funzionamento della rete.
Martin Thoma,

Non mi piace il tuo uso dispregiativo del termine "immagini fantasiose". @Martin
VividD

9
Non intendevo attaccarti, ma la tua risposta eccessivamente difensiva senza effettivamente rispondere alla mia domanda parla da sola. - Ho aggiunto una parte di "interpretazione" al diagramma "lego box".
Martin Thoma,

1
A proposito: il secondo link è morto.
Martin Thoma,

4
@MartinThoma È chiaramente arte dei dati, non dati cioè (vide lisacharlotterost.github.io/2015/12/19/… ).
Piotr Migdal,

3

Non di per sé adatto ai documenti, ma molto utile per mostrare alle persone che non conoscono molto le reti neurali quale potrebbe essere la loro topologia. Questa libreria Javascript (Neataptic) ti consente di visualizzare la tua rete:

inserisci qui la descrizione dell'immagine




Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.