Python에서 신경망 아키텍처를 시각화하는 방법

Jupyter 또는 Google Colab을 사용하여 신경망을 도식적으로 표현하는 방법에 대한 빠른 가이드

이미지 크레딧 — 작성자가 Visualkeras 및 Jupyter Notebook을 사용하여 개발했습니다.

종종 인공 신경망이나 Convolution Neural Networks 또는 Recurrent Neural Networks와 같은 다른 변형을 사용하여 작업하는 동안 우리는 컴파일된 모델을 도식적으로 표현하고 시각화하고 싶습니다. 이를 통해 다음 두 가지 목적을 해결할 수 있습니다.

  1. 여러 모델을 정의하고 교육하는 동안 모델의 깊이를 시각화하고 다양한 레이어와 순차적으로 배치되는 방식을 비교할 수 있습니다.
  2. 모델 구조, 각 레이어에서 사용되는 활성화 함수, 각 레이어의 모양(뉴런 수), 학습해야 하는 매개변수에 대한 이해를 높입니다.

신경망 모델의 시각적 표현을 생성할 수 있는 Python에서 쉽게 사용할 수 있는 몇 가지 패키지가 있습니다. 처음 세 개의 패키지는 모델이 훈련되기 전에도 사용할 수 있습니다(모델은 정의하고 컴파일하기만 하면 됩니다). 그러나 Tensor Board를 사용하려면 아키텍처를 시각화하기 전에 사용자가 정확한 데이터로 모델을 훈련해야 합니다.

  1. ANN 시각화 도구
  2. 비주얼 케라스
  3. Keras 모델 플롯
  4. 텐서보드
핍 설치 Visualkeraspip 설치 ann_visualizerpip 설치 그래프 시각화

“Tensor Board”와 “Keras Model Plot”을 별도로 설치할 필요가 없습니다. 이는 Tensorflow 및 Keras의 초기 설치와 함께 제공됩니다.

아래 나열된 라이브러리 중 일부만 활용할 수 있습니다. 대부분의 라이브러리는 데이터에 대해 명시적으로 교육하지 않고도 TensorFlow 모델을 다이어그램으로 변환할 수 있습니다. 이를 단일 진실 소스로 간주할 수 있습니다. Pandas, Skimage, OpenCV와 같은 일부 라이브러리는 구조화된 데이터나 이미지를 읽을 때 유용합니다.

# 필요한 라이브러리 가져오기팬더를 pd로 가져 오기import numpy as np # numpy 가져오기from skimage import data, io # 가져오기 skimage 라이브러리(데이터 - 테스트 이미지 및 예제 데이터.# io - 이미지를 읽고, 저장하고, 표시합니다.)skimage.color에서 rgb2gray 가져오기import matplotlib.pyplot as plt # Import matplotlib.pyplot(Python의 플로팅 프레임워크)%matplotlib 인라인import os # 이 모듈은 운영 체제 종속 기능을 사용하는 이식 가능한 방법을 제공합니다.os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'수입 경고# 경고 억제warnings.filterwarnings('무시')IPython.display 가져오기 디스플레이에서cv2를 cv로 가져오기
sklearn.metrics에서 혼란_매트릭스 가져오기
sklearn.model_selection에서 import train_test_splittensorflow.keras 가져오기 유틸리티에서tensorflow.keras.models에서 Sequential,load_model 가져오기tensorflow.keras.layers에서 Dense, Dropout, Flatten, Conv2D, MaxPool2D, BatchNormalization을 가져옵니다.tensorflow.keras.optimizers에서 Adam 가져오기tensorflow를 tf로 가져 오기sns로 seaborn 가져 오기

ANN 및 CNN과 관련된 더 많은 콘텐츠를 처음부터 탐색하는 데 유용한 링크입니다.

우리는 서로 다른 하이퍼파라미터를 사용하여 세 가지 다른 CNN 모델을 정의할 것입니다. 이상적으로는 현실 세계에서 다중 카테고리 분류 작업을 위한 모델을 구축하고 있다는 점을 고려하여 정확도나 관련 측정항목을 최대화하기 위해 다양한 아키텍처를 구현하는 것을 목표로 합니다. 우리가 선택한 문제 유형은 시각화 패키지를 사용하는 방법에 영향을 미치지 않습니다.

우리는 서로 다른 수의 CNN 레이어, 최대 풀링 및 밀집 레이어를 사용하여 세 가지 다른 모델을 개별적으로 구축하기 위해 사용자 정의 함수를 만들었습니다.

4.1 – 아키텍처 1 – 얕은 CNN 레이어 + ANN 레이어

def 구성_모델():모델 = Sequential ()model.add(Conv2D(filters=64, kernel_size=(3, 3), input_shape=(128, 128, 1), 활성화='relu'))model.add(Conv2D(filters=64, kernel_size=(3, 3), 활성화='relu'))모델.추가(MaxPool2D((2, 2)))model.add(평탄화())model.add(밀도(256, 활성화='relu'))model.add(Dense(12, 활성화='softmax'))model.compile(loss='categorical_crossentropy', 옵티마이저='adam',metrics=['accuracy'])반환 모델

4.2 — 아키텍처 2 — 심층 CNN + 얕은 ANN 레이어

def sconstruct_model():smodel = 순차()smodel.add(Conv2D(filters=64, kernel_size=(3, 3), input_shape=(128, 128, 3), 활성화='relu'))smodel.add(Conv2D(filters=64, kernel_size=(3, 3), 활성화='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), 활성화='relu'))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), 활성화='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), 활성화='relu'))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), 활성화='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(평탄화())smodel.add(밀도(256, 활성화='relu'))smodel.add(Dense(12, 활성화='softmax'))#옵티마이저 = 아담(lr=0.001)smodel.compile(loss='categorical_crossentropy', 옵티마이저='adam',metrics=['accuracy'])#모델.요약()스모델을 돌려보내다

4.3 — 아키텍처 3 — 심층 CNN 및 ANN 레이어

def cconstruct_model(learningRate):smodel = 순차()smodel.add(Conv2D(filters=32, kernel_size=(3, 3), input_shape=(128, 128, 1), 활성화='relu'))smodel.add(Conv2D(filters=32, kernel_size=(3, 3), 활성화='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=64, kernel_size=(3, 3), 활성화='relu'))smodel.add(Conv2D(filters=64, kernel_size=(3, 3), 활성화='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), 활성화='relu'))smodel.add(Conv2D(filters=128, kernel_size=(3, 3), 활성화='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(평탄화())smodel.add(밀도(256, 활성화='relu'))smodel.add(밀도(256, 활성화='relu'))smodel.add(Dense(12, 활성화='softmax'))최적화 프로그램 = Adam(lr=learningRate)smodel.compile(loss='categorical_crossentropy', 옵티마이저=최적화기, 메트릭=['정확도'])smodel.summary()스모델을 돌려보내다모델=cconstruct_model(0.001)

ANN Visualizer라는 Python 모듈을 사용하면 몇 줄의 코드로 인공 신경망을 시각화할 수 있습니다(Gheorghiu, 2022). Keras와 Python의 Graphviz 모듈을 사용하여 깔끔하고 매력적인 신경망 그래프를 생성합니다. 전체 딥 러닝 네트워크를 시각화하거나 딥 러닝의 발전에 따라 생성한 컨볼루셔널 신경망만 시각화할 수 있는 유연성이 있습니다(Shah, 2018).

아래의 다음 구조를 사용하여 신경망의 PDF 표현을 생성하십시오. 하지만 그 전에 위의 모델을 컴파일해야 합니다.

모델=construct_model()

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

  • 모델 - Keras의 순차 모델
  • 보다 - ann_viz()가 호출된 후 그래프 시각화
  • 파일 이름 - 파일 이름
  • 제목 - 그래프를 나타내는 특정 제목
ann_visualizer.visualize에서 ann_viz 가져오기ann_viz(model, view=True, filename=”cconstruct_model”, title=”CNN — 모델 1 — 단순 아키텍처”)
그림 1: ANN Visualizer를 사용하여 생성된 constructor_model()의 스냅샷. Credit — 작성자가 Jupyter Notebook을 사용하여 개발한 이미지입니다. 원본 출력이 너무 커서 여기에 이미지로 표시할 수 없으므로 여기에는 하단 레이어의 스냅샷이 사용됩니다.

Visualkeras라는 Python 도구를 사용하면 Keras 신경망 설계를 (별도로 또는 TensorFlow의 일부로) 더 쉽게 볼 수 있습니다. 대부분의 스타일링 요구 사항을 쉽게 충족할 수 있습니다. CNN(컨벌루션 신경망)은 계층형 아키텍처 개발을 통해 상당한 이점을 얻습니다. 단순 피드포워드 네트워크를 포함한 대부분의 모델은 이 모듈이 지원하는 그래프 스타일 아키텍처 생성으로부터 큰 이점을 얻습니다(Gavrikov, 2022).

model1=construct_model()model2=sconstruct_model()model3=cconstruct_model(0.009)비주얼케라스 가져오기PIL 가져오기 ImageFont에서Visualkeras.layered_view(모델1, 범례=True)Visualkeras.layered_view(모델2, 범례=True)Visualkeras.layered_view(모델3, 범례=True)
그림 2. 세 가지 다른 모델 아키텍처를 도식적으로 표현한 것을 보여줍니다. Credit — 작성자가 Jupyter Notebook을 사용하여 개발한 이미지입니다.

XNUMXD덴탈의 keras.utils.plot_model Graphviz 및 pydot 패키지를 사용하여 Keras를 통해 정의 및 컴파일된 모델을 플롯하는 내장 함수를 제공합니다. 그래픽적으로는 위에 사용된 패키지보다 덜 직관적이지만 순차 모델(Team, nd)의 기본 아키텍처를 간략하게 설명합니다.

tf.keras.utils.plot_model(모델 1,to_file="모델.png",show_shapes=참,show_dtype=거짓,show_layer_names=참,순위디렉터="TB",Expand_nested=참,dpi=96,레이어_범위=없음,show_layer_activations=참,)

고려해야 할 몇 가지 하이퍼파라미터:

  1. 모델: Keras 컴파일된 모델 또는 모델 객체의 인스턴스
  2. 파일로: 이미지의 파일 이름
  3. show_shapes: 신경망의 각 레이어의 크기와 모양을 표시합니다.
  4. show_layer_activation: 뉴런 내에서 사용되는 디스플레이 활성화 기능
그림 3. tf.keras.utils.plot_model()의 출력을 보여줍니다. Credit — 작성자가 Jupyter Notebook을 사용하여 개발한 이미지입니다.

TensorBoard는 사용자가 다양한 모델 실행 전반에 걸쳐 로그를 시각화할 수 있는 대시보드 인터페이스입니다. 로그는 다양한 시대에 걸쳐 정확도, 재현율, RMSE, MAPE 및 MSE와 같은 모델 검증 측정을 추적하는 것부터 모델 아키텍처의 개념적 그래프를 생성하는 것까지 다양합니다. 이는 작업 수준 그래프를 사용하여 모델이 어떻게 변경될 수 있는지에 대한 통찰력을 제공하면서 의도한 모델이 예상 설계와 일치하는지 시각화하는 강력한 도구입니다.

이 기능을 활용하려면 먼저 TensorBoard를 로드한 다음 로그 디렉터리를 만들어야 합니다.

%load_ext 텐서보드날짜 / 시간 가져 오기 날짜 / 시간tensorflow import keras에서# Keras TensorBoard 콜백을 정의합니다.logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

훈련 전에 Keras TensorBoard 콜백을 생성하고 로그 디렉터리를 지정하세요. model.fit()에 이 콜백을 제공하여 TensorBoard 시각화를 위해 그래프 데이터가 기록되도록 할 수 있습니다. TensorBoard를 호출하면 로드하는 데 몇 분 정도 걸릴 수 있습니다.

모델.적합(X2_열차, Y2_열차,배치_크기=64,시대=5,콜백=[tensorboard_callback])

참고: X2_train 및 Y2_train은 위 코드에 반영되지 않은 학습 데이터세트입니다. 이를 자신만의 훈련 데이터로 대체할 수 있습니다.

TensorBoard는 기본적으로 항상 작업 수준 그래프를 표시합니다. (왼쪽에 "Default" 태그가 강조 표시되어 있습니다.) 데이터가 아래에서 위로 흐르기 때문에 코드에 비해 그래프가 거꾸로 보입니다. 그러나 보시다시피 그래프는 다른 계산 노드로 이어지는 추가 가장자리를 포함하여 Keras 모델의 설명과 대략 유사합니다(Tensorflow, 2022).

그림 4. TensorBoard의 출력을 보여줍니다. Credit — 작성자가 Jupyter Notebook을 사용하여 개발한 이미지입니다.

TensorBoard 사용 방법에 대한 자세한 내용은 참조에서 확인할 수 있습니다.

사용자가 자신의 분석을 이해관계자 그룹에게 제시해야 하는 상업적 관점에서 볼 때 이러한 다이어그램은 토론을 더욱 복잡하게 만듭니다. 이는 극단적인 부가가치가 아닐 수도 있습니다. 그러나 학술 및 학습 관점에서 볼 때 이러한 패키지를 활용하여 딥 러닝 아키텍처를 표시하는 데는 장점이 있습니다. 나에게 ANN 시각화 도우미는 다이어그램을 쉽게 소화할 수 있다는 점에서 다른 것보다 눈에 띄는 반면, TensorBoard의 그래프 출력에는 결과를 사용하기 전에 더 많은 기술이 필요합니다.

Gavrikov, P. (2022년 13월 XNUMX일). Keras/TensorFlow용 Visualkeras. GitHub. https://github.com/paulgavrikov/visualkeras

Gheorghiu, T. (2022년 21월 XNUMX일). ANN 시각화 도구. GitHub. https://github.com/RedaOps/ann-visualizer

Shah, A. (2018년 28월 XNUMX일). 단 한 줄의 코드로 인공 신경망(ANN) 시각화. 중간. https://towardsdatascience.com/visualizing-artificial-neural-networks-anns-with-just-one-line-of-code-b4233607209e

스택 오버플로. (nd). 기계 학습 — 신경망 아키텍처를 어떻게 시각화합니까? 데이터 과학 스택 교환. 29년 2022월 XNUMX일에 검색함: https://datascience.stackexchange.com/questions/12851/how-do-you-visualize-neural-network-architectures

팀, K. (nd). Keras 문서: 모델 플로팅 유틸리티. Keras.io. 29년 2022월 XNUMX일에 검색함: https://keras.io/api/utils/model_plotting_utils/#modeltodot-function

텐서플로우. (2022년 6월 XNUMX일). TensorFlow 그래프 검사 | 텐서보드. 텐서플로우. https://www.tensorflow.org/tensorboard/graphs

소스 https://towardsdatascience.com/how-to-visualize-neural-network-architectures-in-python-567cd2aa6d62?source=rss—-7f60cf5620c9—4에서 https://를 통해 다시 게시된 Python에서 신경망 아키텍처를 시각화하는 방법 warddatascience.com/feed

<!–

–>

타임 스탬프 :

더보기 블록 체인 컨설턴트