Como visualizar arquiteturas de redes neurais em Python

Um guia rápido para criar representação diagramática de suas redes neurais usando Jupyter ou Google Colab

Crédito da imagem – Desenvolvido pelo autor usando visualkeras e Jupyter Notebook.

Freqüentemente, ao trabalhar com Redes Neurais Artificiais ou outras variações, como Redes Neurais de Convolução ou Redes Neurais Recorrentes, queremos visualizar e criar uma representação diagramática de nosso modelo compilado. Isso pode resolver dois propósitos:

  1. Ao definir e treinar vários modelos, podemos visualizar a profundidade do nosso modelo e comparar diferentes camadas e como elas são estabelecidas sequencialmente.
  2. Permite melhor compreensão da estrutura do modelo, funções de ativação utilizadas em cada camada, formato de cada camada (número de neurônios) e parâmetros que precisam ser treinados

Existem alguns pacotes disponíveis em python que podem criar uma representação visual de nossos modelos de redes neurais. Os três primeiros pacotes podem ser usados ​​antes mesmo de um modelo ser treinado (o modelo precisa apenas ser definido e compilado); no entanto, Tensor Boards exige que o usuário treine o modelo com dados precisos antes que a arquitetura possa ser visualizada.

  1. Visualizador de RNA
  2. Keras visuais
  3. Gráfico do modelo Keras
  4. Placa tensora
pip instalar visualkeraspip instalar ann_visualizerpip instalar gráficoviz

Não precisamos instalar o “Tensor Board” e o “Keras Model Plot” separadamente. Isso virá com a instalação inicial do Tensorflow e Keras.

Podemos utilizar apenas algumas das bibliotecas listadas abaixo. A maioria das bibliotecas pode converter um modelo do TensorFlow em um diagrama sem treiná-lo explicitamente nos dados. Você pode considerar isso como uma única fonte de verdade. Algumas bibliotecas, como Pandas, Skimage e OpenCV, serão úteis na leitura de dados ou imagens estruturados.

#Importar bibliotecas necessáriasimportar pandas como pdimportar numpy como np # Importar numpyde dados de importação do skimage, io # Importar biblioteca do skimage (dados - Imagens de teste e dados de exemplo.# io - Ler, salvar e exibir imagens.)de skimage.color importar rgb2grayimport matplotlib.pyplot as plt # Import matplotlib.pyplot (estrutura de plotagem em Python.)% matplotlib inlineimport os # Este módulo fornece uma maneira portátil de usar funcionalidades dependentes do sistema operacional.os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'avisos de importação# Suprimir avisoswarnings.filterwarnings('ignorar')da exibição de importação IPython.displayimportar cv2 como cv
de sklearn.metrics importar confusão_matrix
de sklearn.model_selection import train_test_splitde utilitários de importação tensorflow.kerasde tensorflow.keras.models importar Sequencial,load_modelde tensorflow.keras.layers importar Dense, Dropout, Flatten, Conv2D, MaxPool2D, BatchNormalizationde tensorflow.keras.optimizers import Adamimportar tensorflow como tfimportado do mar como sns

Alguns links úteis para explorar mais conteúdo sobre RNAs e CNNs do zero.

Estaremos definindo três modelos CNN diferentes com hiperparâmetros diferentes. Idealmente, no mundo real, pretendemos implementar diferentes arquiteturas para maximizar a precisão ou quaisquer métricas relevantes, considerando que estamos construindo o modelo para uma tarefa de classificação multicategoria. Nossa escolha do tipo de problema não terá nenhum impacto sobre como colocar os pacotes de visualização em uso.

Criamos funções definidas pelo usuário para construir três modelos diferentes separadamente com um número diferente de camadas CNN, pooling máximo e camadas densas.

4.1 – Arquitetura 1 – Camadas CNN rasas + Camadas RNA

def construto_model():modelo = Sequencial()model.add(Conv2D(filtros=64, kernel_size=(3, 3), input_shape=(128, 128, 1), ativação=’relu’))model.add(Conv2D(filtros=64, kernel_size=(3, 3), ativação=’relu’))modelo.add(MaxPool2D((2, 2)))model.add (Flatten ())model.add(Dense(256, ativação=’relu’))model.add(Dense(12, ativação=’softmax’))model.compile(perda=’categorical_crossentropy’, otimizador=’adam’, métricas=[‘precisão’])modelo de retorno

4.2 — Arquitetura 2 — Camadas CNN profundas + RNA superficiais

def sconstruct_model():smodel = Sequencial()smodel.add(Conv2D(filtros=64, kernel_size=(3, 3), input_shape=(128, 128, 3), ativação=’relu’))smodel.add(Conv2D(filtros=64, kernel_size=(3, 3), ativação=’relu’))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filtros=128, kernel_size=(3, 3), ativação=’relu’))smodel.add(Conv2D(filtros=128, kernel_size=(3, 3), ativação=’relu’))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filtros=128, kernel_size=(3, 3), ativação=’relu’))smodel.add(Conv2D(filtros=128, kernel_size=(3, 3), ativação=’relu’))smodel.add(MaxPool2D((2, 2)))smodel.add(Achatar())smodel.add(Dense(256, ativação=’relu’))smodel.add(Dense(12, ativação=’softmax’))#optimizador = Adam(lr=0.001)smodel.compile(perda=’categorical_crossentropy’, otimizador=’adam’, métricas=[‘precisão’])#model.resumo()modelo de retorno

4.3 — Arquitetura 3 — Camadas Profundas CNN e ANN

def cconstruct_model (taxa de aprendizagem):smodel = Sequencial()smodel.add(Conv2D(filtros=32, kernel_size=(3, 3), input_shape=(128, 128, 1), ativação=’relu’))smodel.add(Conv2D(filtros=32, kernel_size=(3, 3), ativação=’relu’))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filtros=64, kernel_size=(3, 3), ativação=’relu’))smodel.add(Conv2D(filtros=64, kernel_size=(3, 3), ativação=’relu’))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filtros=128, kernel_size=(3, 3), ativação=’relu’))smodel.add(Conv2D(filtros=128, kernel_size=(3, 3), ativação=’relu’))smodel.add(MaxPool2D((2, 2)))smodel.add(Achatar())smodel.add(Dense(256, ativação=’relu’))smodel.add(Dense(256, ativação=’relu’))smodel.add(Dense(12, ativação=’softmax’))otimizador = Adam (lr = taxa de aprendizagem)smodel.compile (perda = 'categorical_crossentropy', otimizador = otimizador, métricas = ['precisão'])smodel.summary()modelo de retornomodelo=cconstruct_model(0.001)

Um módulo Python denominado ANN Visualizer permite visualizar uma rede neural artificial com poucas linhas de código (Gheorghiu, 2022). Ele usa o módulo Graphviz de Keras e Python para produzir um gráfico de rede neural organizado e atraente. Você tem a flexibilidade de visualizar toda a Rede de Aprendizado Profundo ou apenas a Rede Neural Convolucional que você criou impulsionada pelos avanços no aprendizado profundo (Shah, 2018).

Use a seguinte estrutura abaixo para gerar uma representação em PDF de sua rede neural. Porém, antes disso, precisamos compilar os modelos acima.

modelo=construir_modelo()

ann_viz(modelo, view=True, filename=”network.gv”, title=”Minha Rede Neural”)

  • modelo - Modelo Sequencial de Keras
  • visualizar - Visualize o gráfico após ann_viz() ter sido chamado
  • nome do arquivo - Nome do arquivo
  • título - Qualquer título específico para denotar o gráfico
de ann_visualizer.visualize importar ann_vizann_viz(modelo, view=True, filename=”cconstruct_model”, title=”CNN — Modelo 1 — Arquitetura Simples”)
Figura 1: Instantâneo de construct_model() criado usando ANN Visualizer. Crédito — Imagem desenvolvida pelo autor usando Jupyter Notebook. a saída original é muito grande para caber aqui como uma imagem, portanto, um instantâneo das camadas inferiores é usado aqui.

Uma ferramenta Python chamada Visualkeras facilita a visualização dos designs de rede neural Keras (separadamente ou como parte do TensorFlow). A maioria das necessidades de estilo pode ser atendida com facilidade. As redes neurais convolucionais (CNNs) se beneficiam significativamente com o desenvolvimento de arquiteturas em camadas. A maioria dos modelos, incluindo redes feed-forward simples, beneficiam muito da geração de arquitetura de estilo gráfico, que este módulo suporta (Gavrikov, 2022).

modelo1=construir_modelo()model2=sconstruct_model()modelo3=cconstruir_modelo(0.009)importar visualkerasda importação PIL ImageFontvisualkeras.layered_view(model1, legenda=True)visualkeras.layered_view(model2, legenda=True)visualkeras.layered_view(model3, legenda=True)
Figura 2. Ilustra uma representação diagramática de três arquiteturas de modelos diferentes. Crédito — Imagem desenvolvida pelo autor usando Jupyter Notebook.

A keras.utils.plot_model fornece funções integradas para traçar um modelo definido e compilado por meio de Keras usando pacotes Graphviz e pydot. Graficamente é menos intuitivo que os pacotes usados ​​acima, mas descreve a arquitetura básica de um modelo sequencial (Team, n.d.).

tf.keras.utils.plot_model(modelo1,to_file="modelo.png",show_shapes=Verdadeiro,show_dtype=Falso,show_layer_names=Verdadeiro,classificaçãodir="TB",expand_nested=Verdadeiro,dpi=96,intervalo_camada=Nenhum,show_layer_activations=Verdadeiro,)

Alguns hiperparâmetros a serem considerados:

  1. modelo: Uma instância do modelo compilado Keras ou objeto de modelo
  2. arquivar: Nome do arquivo da imagem
  3. mostrar_formas: exibir a dimensão e a forma de cada camada na rede neural
  4. show_layer_activation: exibir funções de ativação usadas nos neurônios
Figura 3. Ilustra a saída de tf.keras.utils.plot_model(). Crédito — Imagem desenvolvida pelo autor usando Jupyter Notebook.

TensorBoard é uma interface de painel que permite aos usuários visualizar logs em diferentes execuções de modelos. Os logs podem variar desde o rastreamento de qualquer medida de validação do modelo, como precisão, recall, RMSE, MAPE e MSE em diferentes épocas, até a criação de um gráfico conceitual da arquitetura do modelo. É uma ferramenta poderosa para visualizar se o modelo pretendido corresponde ao design esperado, ao mesmo tempo que gera insights sobre como um modelo pode ser alterado usando um gráfico de nível operacional.

Para utilizar esta funcionalidade, precisamos primeiro carregar o TensorBoard e depois criar um diretório de log.

%load_ext tensorboardfrom datetime importar datetimede keras de importação tensorflow# Defina o retorno de chamada Keras TensorBoard.logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")tensorboard_callback=keras.callbacks.TensorBoard(log_dir=logdir)

Crie o retorno de chamada Keras TensorBoard e especifique o diretório de log antes do treinamento. Você pode garantir que os dados do gráfico sejam registrados para visualização do TensorBoard fornecendo este retorno de chamada para model.fit(). Depois de invocar o TensorBoard, pode demorar alguns minutos para carregar.

modelo.fit(X2_trem, Y2_trem,tamanho_do_lote=64,épocas = 5,retornos de chamada=[tensorboard_callback])

Nota: X2_train e Y2_train são conjuntos de dados de treinamento não refletidos nos códigos acima. Você pode substituir isso por quaisquer dados de treinamento de sua preferência.

O TensorBoard sempre mostra o gráfico de nível operacional por padrão. (A tag “Default” está destacada à esquerda.) O gráfico está de cabeça para baixo em comparação com o código porque os dados fluem de baixo para cima. Mas como você pode ver, o gráfico se assemelha aproximadamente à descrição do modelo Keras, com arestas adicionais levando a outros nós de computação (Tensorflow, 2022).

Figura 4. Ilustra a saída do TensorBoard. Crédito — Imagem desenvolvida pelo autor usando Jupyter Notebook.

Mais contexto sobre como usar o TensorBoard pode ser encontrado em Referência.

Do ponto de vista comercial, onde um utilizador tem de apresentar a sua análise a um grupo de stakeholders, estes diagramas acrescentam mais complexidade à discussão. Eles podem não ser um valor agregado extremo. No entanto, do ponto de vista acadêmico e de aprendizagem, há mérito em utilizar esses pacotes para exibir essas arquiteturas de aprendizagem profunda. O visualizador de RNA, para mim, se destaca dos demais porque é fácil de digerir o diagrama, enquanto a saída do gráfico do TensorBoard requer mais detalhes técnicos antes que os resultados possam ser consumidos.

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

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

Shah, A. (2018, 28 de abril). Visualizando Redes Neurais Artificiais (RNAs) com apenas uma linha de código. Médio. https://towardsdatascience.com/visualizing-artificial-neural-networks-anns-with-just-one-line-of-code-b4233607209e

Estouro de pilha. (sd). aprendizado de máquina – como você visualiza arquiteturas de redes neurais? Troca de pilha de ciência de dados. Recuperado em 29 de outubro de 2022, de https://datascience.stackexchange.com/questions/12851/how-do-you-visualize-neural-network-architectures

Equipe, K. (nd). Documentação Keras: utilitários de plotagem de modelo. Keras.io. Recuperado em 29 de outubro de 2022, de https://keras.io/api/utils/model_plotting_utils/#modeltodot-function

Fluxo tensor. (2022, 6 de janeiro). Examinando o gráfico do TensorFlow | TensorBoard. TensorFlow. https://www.tensorflow.org/tensorboard/graphs

Como visualizar arquiteturas de rede neural em Python republicado da fonte https://towardsdatascience.com/how-to-visualize-neural-network-architectures-in-python-567cd2aa6d62?source=rss—-7f60cf5620c9—4 via https:// em direçãodatascience.com/feed

<!–

->

Carimbo de hora:

Mais de Consultores Blockchain