이 페이지는 Cloud Translation API를 통해 번역되었습니다.
Switch to English

텐서 플로우 그래프 검사

TensorFlow.org에서보기 Google Colab에서 실행 GitHub에서 소스보기

개요

TensorBoard의 그래프 대시 보드 는 TensorFlow 모델을 검사하기위한 강력한 도구입니다. 모델 구조의 개념 그래프를 신속하게보고 원하는 설계와 일치하는지 확인할 수 있습니다. 또한 op-level 그래프를보고 TensorFlow가 프로그램을 이해하는 방법을 이해할 수 있습니다. op-level 그래프를 검사하면 모델 변경 방법에 대한 통찰력을 얻을 수 있습니다. 예를 들어 훈련이 예상보다 느리게 진행되는 경우 모델을 재 설계 할 수 있습니다.

이 학습서는 그래프 진단 데이터를 생성하고 TensorBoard의 그래프 대시 보드에서 시각화하는 방법에 대한 간략한 개요를 제공합니다. Fashion-MNIST 데이터 세트에 대한 간단한 Keras Sequential 모델을 정의 및 학습하고 모델 그래프를 기록하고 검사하는 방법을 학습합니다. 또한 추적 API를 사용하여 새로운 tf.function 어노테이션을 사용하여 작성된 함수에 대한 그래프 데이터를 생성합니다.

설정

 # Load the TensorBoard notebook extension.
%load_ext tensorboard
 
 from datetime import datetime
from packaging import version

import tensorflow as tf
from tensorflow import keras

print("TensorFlow version: ", tf.__version__)
assert version.parse(tf.__version__).release[0] >= 2, \
    "This notebook requires TensorFlow 2.0 or above."
 
TensorFlow version:  2.2.0

 import tensorboard
tensorboard.__version__
 
'2.2.1'
 # Clear any logs from previous runs
!rm -rf ./logs/ 
 

Keras 모델 정의

이 예에서 분류기는 간단한 4 계층 순차 모델입니다.

 # Define the model.
model = keras.models.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(32, activation='relu'),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(10, activation='softmax')
])

model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy'])
 

교육 데이터를 다운로드하여 준비하십시오.

 (train_images, train_labels), _ = keras.datasets.fashion_mnist.load_data()
train_images = train_images / 255.0
 

모델 훈련 및 데이터 기록

학습하기 전에 로그 디렉토리를 지정하여 Keras TensorBoard 콜백을 정의하십시오. 이 콜백을 Model.fit ()에 전달하면 그래프 데이터가 TensorBoard에서 시각화되도록 로깅됩니다.

 # Define the Keras TensorBoard callback.
logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

# Train the model.
model.fit(
    train_images,
    train_labels, 
    batch_size=64,
    epochs=5, 
    callbacks=[tensorboard_callback])
 
Epoch 1/5
938/938 [==============================] - 2s 2ms/step - loss: 0.6955 - accuracy: 0.7618
Epoch 2/5
938/938 [==============================] - 2s 2ms/step - loss: 0.4877 - accuracy: 0.8296
Epoch 3/5
938/938 [==============================] - 2s 2ms/step - loss: 0.4458 - accuracy: 0.8414
Epoch 4/5
938/938 [==============================] - 2s 2ms/step - loss: 0.4246 - accuracy: 0.8476
Epoch 5/5
938/938 [==============================] - 2s 2ms/step - loss: 0.4117 - accuracy: 0.8508

<tensorflow.python.keras.callbacks.History at 0x7f656ecc3fd0>

연산 레벨 그래프

TensorBoard를 시작하고 UI가로드 될 때까지 몇 초 동안 기다리십시오. 상단의 "그래프"를 탭하여 그래프 대시 보드를 선택하십시오.

 %tensorboard --logdir logs
 

기본적으로 TensorBoard는 op 레벨 그래프를 표시합니다. (왼쪽에서 "Default"태그가 선택된 것을 볼 수 있습니다.) 그래프가 반전됩니다. 데이터는 아래에서 위로 흐르므로 코드와 비교하여 거꾸로되어 있습니다. 그러나 그래프가 Keras 모델 정의와 거의 일치하고 다른 계산 노드에 대한 추가 모서리가 있음을 알 수 있습니다.

그래프는 종종 매우 커서 그래프 시각화를 조작 할 수 있습니다.

  • 확대축소 하려면 스크롤
  • 팬으로 드래그
  • 두 번 클릭하면 노드 확장이 전환됩니다 (노드는 다른 노드의 컨테이너 일 수 있음)

노드를 클릭하여 메타 데이터를 볼 수도 있습니다. 이를 통해 입력, 출력, 모양 및 기타 세부 사항을 볼 수 있습니다.

개념적 그래프

실행 그래프 외에도 TensorBoard는 개념적 그래프 도 표시합니다. 이것은 Keras 모델의 모습입니다. 저장된 모델을 재사용하고 구조를 검사하거나 확인하려는 경우에 유용 할 수 있습니다.

개념적 그래프를 보려면 "keras"태그를 선택하십시오. 이 예에서는 축소 된 순차 노드가 표시됩니다. 모델 구조를 보려면 노드를 두 번 클릭하십시오.


tf.functions의 그래프

지금까지의 예제는 Keras 레이어를 정의하고 Model.fit ()을 호출하여 그래프를 생성 한 Keras 모델의 그래프를 설명했습니다.

tf.function 어노테이션을 사용하여 "autograph" 즉, 파이썬 계산 함수를 고성능 TensorFlow 그래프로 변환해야하는 상황이 발생할 수 있습니다. 이러한 상황에서는 TensorFlow Summary Trace API 를 사용하여 TensorBoard에서 시각화 할 수 있도록 사인 기능을 기록합니다.

요약 추적 API를 사용하려면 다음을 수행하십시오.

  • tf.function 으로 함수 정의 및 주석 달기
  • 함수 호출 사이트 바로 앞에 tf.summary.trace_on() 사용하십시오.
  • profiler=True 를 전달하여 그래프에 프로파일 정보 (메모리, CPU 시간) 추가
  • 요약 파일 작성기를 사용하여 tf.summary.trace_export() 를 호출하여 로그 데이터를 저장하십시오.

그런 다음 TensorBoard를 사용하여 함수의 작동 방식을 확인할 수 있습니다.

 # The function to be traced.
@tf.function
def my_func(x, y):
  # A simple hand-rolled layer.
  return tf.nn.relu(tf.matmul(x, y))

# Set up logging.
stamp = datetime.now().strftime("%Y%m%d-%H%M%S")
logdir = 'logs/func/%s' % stamp
writer = tf.summary.create_file_writer(logdir)

# Sample data for your function.
x = tf.random.uniform((3, 3))
y = tf.random.uniform((3, 3))

# Bracket the function call with
# tf.summary.trace_on() and tf.summary.trace_export().
tf.summary.trace_on(graph=True, profiler=True)
# Call only one tf.function when tracing.
z = my_func(x, y)
with writer.as_default():
  tf.summary.trace_export(
      name="my_func_trace",
      step=0,
      profiler_outdir=logdir)
 
 %tensorboard --logdir logs/func
 

이제 TensorBoard가 이해 한 함수 구조를 볼 수 있습니다. "프로필"라디오 버튼을 클릭하면 CPU 및 메모리 통계를 볼 수 있습니다.