Cómo visualizar arquitecturas de redes neuronales en Python

Una guía rápida para crear una representación esquemática de sus redes neuronales usando Jupyter o Google Colab

Crédito de imagen: desarrollado por el autor utilizando visualkeras y Jupyter Notebook.

A menudo, mientras trabajamos con redes neuronales artificiales u otras variaciones como redes neuronales convolucionales o redes neuronales recurrentes, queremos visualizar y crear una representación esquemática de nuestro modelo compilado. Esto puede resolver dos propósitos:

  1. Al definir y entrenar múltiples modelos, podemos visualizar la profundidad de nuestro modelo y comparar diferentes capas y cómo se colocan secuencialmente.
  2. Permite una mejor comprensión de la estructura del modelo, las funciones de activación utilizadas en cada capa, la forma de cada capa (número de neuronas) y los parámetros que deben entrenarse.

Hay algunos paquetes disponibles en Python que pueden crear una representación visual de nuestros modelos de redes neuronales. Los primeros tres paquetes se pueden utilizar incluso antes de entrenar un modelo (el modelo sólo necesita definirse y compilarse); sin embargo, Tensor Boards requiere que el usuario entrene el modelo con datos precisos antes de poder visualizar la arquitectura.

  1. Visualizador de RNA
  2. Keras visuales
  3. Trama del modelo Keras
  4. Tablero tensor
pip instalar visualkerasinstalación de pip ann_visualizerinstalación de pip en Graphviz

No necesitamos instalar el "Tablero tensor" y el "Gráfico modelo Keras" por separado. Esto vendrá con la instalación inicial de Tensorflow y Keras.

Podemos utilizar sólo algunas de las bibliotecas que se enumeran a continuación. La mayoría de las bibliotecas pueden convertir un modelo de TensorFlow en un diagrama sin entrenarlo explícitamente con datos. Puedes considerar esto como una única fuente de verdad. Algunas bibliotecas, como Pandas, Skimage y OpenCV, serán útiles al leer imágenes o datos estructurados.

# Importar bibliotecas necesariasimportar pandas como pdimportar numpy como np # Importar numpydesde skimage importar datos, io # Importar biblioteca skimage (datos - Imágenes de prueba y datos de ejemplo.# io: leer, guardar y mostrar imágenes).desde skimage.color importar rgb2grayimportar matplotlib.pyplot como plt # Importar matplotlib.pyplot (marco de trazado en Python).% matplotlib en líneaimport os # Este módulo proporciona una forma portátil de utilizar la funcionalidad dependiente del sistema operativo.os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'advertencias de importación# Suprimir advertenciaswarnings.filterwarnings ('ignorar')desde IPython.display visualización de importaciónimportar cv2 como cv
desde sklearn.metrics importe confusion_matrix
de sklearn.model_selection importar train_test_splitde tensorflow.keras importar utilidadesde tensorflow.keras.models importar secuencial, load_modeldesde tensorflow.keras.layers importe Dense, Dropout, Flatten, Conv2D, MaxPool2D, BatchNormalizationde TensorFlow.keras.optimizers Import ADAMimportar tensorflow como tfimportar seaborn como sns

Algunos enlaces útiles para explorar más contenido sobre ANN y CNN desde cero.

Definiremos tres modelos CNN diferentes con diferentes hiperparámetros. Idealmente, en el mundo real, nuestro objetivo es implementar diferentes arquitecturas para maximizar la precisión o cualquier métrica relevante, considerando que estamos construyendo el modelo para una tarea de clasificación de múltiples categorías. Nuestra elección del tipo de problema no tendrá ningún impacto en cómo utilizar los paquetes de visualización.

Creamos funciones definidas por el usuario para construir tres modelos diferentes por separado con un número diferente de capas CNN, agrupación máxima y capas densas.

4.1 – Arquitectura 1 – Capas CNN superficiales + capas ANN

def construct_model():modelo = secuencial ()model.add(Conv2D(filtros=64, kernel_size=(3, 3), input_shape=(128, 128, 1), activación='relu'))model.add(Conv2D(filtros=64, kernel_size=(3, 3), activación='relu'))modelo.add(MaxPool2D((2, 2)))model.add (Aplanar ())modelo.add(Dense(256, activación='relu'))model.add(Denso(12, activación='softmax'))model.compile(loss='categorical_crossentropy', optimizador='adam', métricas=['exactitud'])modelo de devolución

4.2 - Arquitectura 2 - CNN profunda + capas ANN superficiales

def sconstruct_model():smodel = Secuencial()smodel.add(Conv2D(filtros=64, kernel_size=(3, 3), input_shape=(128, 128, 3), activación='relu'))smodel.add(Conv2D(filtros=64, kernel_size=(3, 3), activación='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filtros=128, kernel_size=(3, 3), activación='relu'))smodel.add(Conv2D(filtros=128, kernel_size=(3, 3), activación='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filtros=128, kernel_size=(3, 3), activación='relu'))smodel.add(Conv2D(filtros=128, kernel_size=(3, 3), activación='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Aplanar())smodel.add(Denso(256, activación='relu'))smodel.add(Denso(12, activación='softmax'))#optimizador = Adán(lr=0.001)smodel.compile(loss='categorical_crossentropy', optimizador='adam', métricas=['exactitud'])#Resumen Modelo()modelo de regreso

4.3 - Arquitectura 3 - Capas profundas de CNN y ANN

def cconstruct_model(tasa de aprendizaje):smodel = Secuencial()smodel.add(Conv2D(filtros=32, kernel_size=(3, 3), input_shape=(128, 128, 1), activación='relu'))smodel.add(Conv2D(filtros=32, kernel_size=(3, 3), activación='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filtros=64, kernel_size=(3, 3), activación='relu'))smodel.add(Conv2D(filtros=64, kernel_size=(3, 3), activación='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filtros=128, kernel_size=(3, 3), activación='relu'))smodel.add(Conv2D(filtros=128, kernel_size=(3, 3), activación='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Aplanar())smodel.add(Denso(256, activación='relu'))smodel.add(Denso(256, activación='relu'))smodel.add(Denso(12, activación='softmax'))optimizador = Adam(lr=tasa de aprendizaje)smodel.compile(loss='categorical_crossentropy', optimizador=optimizador, métricas=['exactitud'])smodel.summary()modelo de regresomodelo=cconstruct_model(0.001)

Un módulo de Python llamado ANN Visualizer permite visualizar una red neuronal artificial con unas pocas líneas de código (Gheorghiu, 2022). Utiliza el módulo Graphviz de Keras y Python para producir un gráfico de red neuronal ordenado y atractivo. Tiene la flexibilidad de visualizar toda la red de aprendizaje profundo o solo la red neuronal convolucional que ha creado impulsada por los avances en el aprendizaje profundo (Shah, 2018).

Utilice la siguiente estructura a continuación para generar una representación en PDF de su red neuronal. Sin embargo, antes de eso, necesitamos compilar los modelos anteriores.

modelo=construcción_modelo()

ann_viz(modelo, vista=Verdadero, nombre de archivo=”network.gv”, título=”MyNeural Network”)

  • modelo - Modelo secuencial de Keras
  • vista - Visualice el gráfico después de llamar a ann_viz()
  • Nombre del archivo - Nombre del archivo
  • título - Cualquier título específico para indicar el gráfico.
desde ann_visualizer.visualize importar ann_vizann_viz(modelo, vista=True, nombre de archivo=”cconstruct_model”, título=”CNN - Modelo 1 - Arquitectura simple")
Figura 1: Instantánea de construct_model() creada con ANN Visualizer. Crédito: imagen desarrollada por el autor utilizando Jupyter Notebook. la salida original es demasiado grande para caber aquí como imagen, por lo que aquí se utiliza una instantánea de las capas inferiores.

Una herramienta de Python llamada Visualkeras facilita ver los diseños de redes neuronales de Keras (ya sea por separado o como parte de TensorFlow). La mayoría de las necesidades de estilo se pueden satisfacer con facilidad. Las redes neuronales convolucionales (CNN) se benefician significativamente del desarrollo de arquitecturas de estilo en capas. La mayoría de los modelos, incluidas las redes de retroalimentación simples, se benefician enormemente de la generación de arquitectura de estilo gráfico, que admite este módulo (Gavrikov, 2022).

modelo1=construcción_modelo()modelo2=sconstruct_model()modelo3=cconstruct_model(0.009)importar Keras Visualesdesde PIL importar ImageFontvisualkeras.layered_view(modelo1, leyenda=Verdadero)visualkeras.layered_view(modelo2, leyenda=Verdadero)visualkeras.layered_view(modelo3, leyenda=Verdadero)
Figura 2. Ilustra una representación esquemática de tres arquitecturas de modelos diferentes. Crédito: imagen desarrollada por el autor utilizando Jupyter Notebook.

El keras.utils.plot_model proporciona funciones incorporadas para trazar un modelo definido y compilado a través de Keras usando paquetes Graphviz y pydot. Gráficamente es menos intuitivo que los paquetes utilizados anteriormente, pero describe la arquitectura básica de un modelo secuencial (Team, sf).

tf.keras.utils.plot_model(modelo 1,to_file="modelo.png",show_shapes=Verdadero,show_dtype=Falso,show_layer_names=Verdadero,rangodir="TB",expand_nested=Verdadero,ppp = 96,Layer_range=Ninguno,show_layer_activations=Verdadero,)

Pocos hiperparámetros a considerar:

  1. modelo: Una instancia de modelo compilado de Keras u objeto de modelo.
  2. archivar: Nombre de archivo de la imagen
  3. mostrar_formas: mostrar la dimensión y la forma de cada capa en la red neuronal
  4. show_layer_activación: Mostrar funciones de activación utilizadas dentro de las neuronas.
Figura 3. Ilustra el resultado de tf.keras.utils.plot_model(). Crédito: imagen desarrollada por el autor utilizando Jupyter Notebook.

TensorBoard es una interfaz de panel que permite a los usuarios visualizar registros en diferentes ejecuciones de modelos. Los registros pueden variar desde el seguimiento de cualquier medida de validación del modelo, como precisión, recuperación, RMSE, MAPE y MSE en diferentes épocas, hasta la creación de un gráfico conceptual de la arquitectura del modelo. Es una herramienta poderosa para visualizar si el modelo previsto coincide con el diseño esperado y, al mismo tiempo, generar información sobre cómo se puede cambiar un modelo mediante un gráfico de nivel de operación.

Para utilizar esta funcionalidad, primero debemos cargar TensorBoard y luego crear un directorio de registro.

%load_ext tensorboarddesde datetime import datetimede tensorflow importar keras# Definir la devolución de llamada de Keras TensorBoard.logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

Cree la devolución de llamada de Keras TensorBoard y especifique el directorio de registro antes del entrenamiento. Puede asegurarse de que los datos del gráfico se registren para la visualización de TensorBoard proporcionando esta devolución de llamada a model.fit(). Una vez que invocas TensorBoard, es posible que tarde unos minutos en cargarse.

modelo.encajar(Tren_X2, tren_Y2,lote_tamaño=64,épocas = 5,devoluciones de llamada = [tensorboard_callback])

Nota: X2_train e Y2_train son conjuntos de datos de entrenamiento que no se reflejan en los códigos anteriores. Puedes reemplazar esto con cualquier dato de entrenamiento propio.

TensorBoard siempre muestra el gráfico de nivel de operación de forma predeterminada. (La etiqueta "Predeterminado" está resaltada a la izquierda). El gráfico está al revés en comparación con el código porque los datos fluyen de abajo hacia arriba. Pero como puede ver, el gráfico se parece más o menos a la descripción del modelo Keras, con aristas adicionales que conducen a otros nodos de cálculo (Tensorflow, 2022).

Figura 4. Ilustra el resultado de TensorBoard. Crédito: imagen desarrollada por el autor utilizando Jupyter Notebook.

Puede encontrar más contexto sobre cómo usar TensorBoard en Referencia.

Desde un punto de vista comercial, donde un usuario tiene que presentar su análisis a un grupo de partes interesadas, estos diagramas añaden más complejidad a la discusión. Puede que no sean un valor añadido extremo. Sin embargo, desde una perspectiva académica y de aprendizaje, tiene ventajas utilizar estos paquetes para mostrar estas arquitecturas de aprendizaje profundo. Para mí, el visualizador ANN se destaca sobre el resto porque es fácil de digerir el diagrama, mientras que la salida del gráfico de TensorBoard requiere más tecnicismos antes de que se puedan consumir los resultados.

Gavrikov, P. (2022, 13 de abril). Visualkeras para Keras/TensorFlow. GitHub. https://github.com/paulgavrikov/visualkeras

Gheorghiu, T. (2022 de octubre de 21). Visualizador de RNA. GitHub. https://github.com/RedaOps/ann-visualizer

Shah, A. (2018 de abril de 28). Visualización de redes neuronales artificiales (RNA) con una sola línea de código. Medio. https://towardsdatascience.com/visualizing-artificial-neural-networks-anns-with-just-one-line-of-code-b4233607209e

Desbordamiento de pila. (Dakota del Norte). Aprendizaje automático: ¿cómo se visualizan las arquitecturas de redes neuronales? Intercambio de pilas de ciencia de datos. Recuperado el 29 de octubre de 2022 de https://datascience.stackexchange.com/questions/12851/how-do-you-visualize-neural-network-architectures

Equipo, K. (sin fecha). Documentación de Keras: utilidades de trazado de modelos. Keras.io. Recuperado el 29 de octubre de 2022 de https://keras.io/api/utils/model_plotting_utils/#modeltodot-function

Tensorflujo. (2022, 6 de enero). Examinando el gráfico de TensorFlow | Tablero Tensor. TensorFlow. https://www.tensorflow.org/tensorboard/graphs

Cómo visualizar arquitecturas de redes neuronales en Python Republicado desde la fuente https://towardsdatascience.com/how-to-visualize-neural-network-architectures-in-python-567cd2aa6d62?source=rss—-7f60cf5620c9—4 vía https:// haciadatascience.com/feed

<!–

->

Sello de tiempo:

Mas de Consultores Blockchain