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?
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?
Risposte:
Se la rete neurale viene fornita come grafico Tensorflow, è possibile visualizzare questo grafico con TensorBoard .
Ecco come appare la CNN MNIST:
Puoi aggiungere tu stesso nomi / ambiti (come "dropout", "softmax", "fc1", "conv1", "conv2").
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").
Di recente ho creato uno strumento per disegnare architetture NN ed esportare SVG, chiamato NN-SVG
In Caffe puoi usare caffe / draw.py per disegnare il protobuffer NetParameter:
In Matlab, puoi usare view (net)
Keras.js :
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
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).
Ecco un altro modo: le dotnets , usando Graphviz , fortemente ispirate a questo post di Thiago G. Martins.
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)
Il pacchetto Python conx
può visualizzare reti con attivazioni con la funzione net.picture()
di produrre immagini SVG, PNG o PIL come questa:
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/
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. 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/
In R, nnet
non 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 neuralnet
che presenta una plot.neuralnet
funzione, quindi puoi semplicemente fare:
data(infert, package="datasets")
plot(neuralnet(case~parity+induced+spontaneous, infert))
neuralnet
non è usato tanto quanto nnet
perché nnet
è molto più vecchio e viene spedito con r-cran. Ma neuralnet
ha 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.
Ci sono alcuni nuovi sforzi alternativi sulla visualizzazione della rete neurale.
Si prega di consultare questi articoli:
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:
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:
Puoi leggere il popolare articolo Comprendere le reti neurali attraverso la visualizzazione profonda che discute la visualizzazione delle reti convoluzionali. La sua implementazione non solo mostra ogni livello, ma descrive anche le attivazioni, i pesi, le deconvoluzioni e molte altre cose che sono profondamente discusse nel documento. È presente il codice caffe'
. La parte interessante è che puoi sostituire il modello pre-addestrato con il tuo.
Tensorspace-JS è un fantastico strumento per la visualizzazione 3d dell'architettura di rete:
ed ecco un bel post su come scrivere un programma:
Netscope è il mio strumento quotidiano per i modelli Caffe.