TensorFlow 그래프 검사

TensorFlow.org에서 보기 Google Colab에서 실행 GitHub에서 소스 보기 노트북 다운로드

개요

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

이 튜토리얼에서는 그래프 진단 데이터를 생성하고 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계층 Sequential 모델입니다.

# 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.dev를 사용하여 호스팅되고 공유 가능한 실험을 만들 수도 있습니다.

!tensorboard dev upload \
  --logdir logs \
  --name "Sample op-level graph" \
  --one_shot

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

그래프는 종종 매우 크기 때문에 그래프 시각화를 조작할 수 있습니다.

  • 스크롤 밖으로 확대하기
  • 드래그
  • 더블 클릭하면 노드 확장 (노드가 다른 노드의 컨테이너가 될 수 있습니다) 토글

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

개념적 그래프

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

개념적 그래프를 보려면 "keras" 태그를 선택하십시오. 이 예를 들어, 당신은 붕괴 순차 노드를 볼 수 있습니다. 노드를 두 번 클릭하여 모델의 구조를 확인합니다.


tf.functions의 그래프

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

당신이 사용할 필요로하는 곳에 당신은 상황이 발생할 수 있습니다 tf.function 에 주석을 "사인" 고성능 TensorFlow 그래프로, 파이썬 계산 기능을 변환, 즉,. 이러한 상황의 경우, TensorBoard의 시각화를위한 사인 기능을 기록 TensorFlow 요약 추적 API를 사용합니다.

요약 추적 API를 사용하려면:

  • 정의하고있는 기능 주석 tf.function
  • 사용 tf.summary.trace_on() 즉시 함수 호출 사이트 전에.
  • 전달하여 그래프 프로파일 정보 (메모리, CPU 시간)을 추가 profiler=True
  • 요약 파일 작가, 전화로 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 및 메모리 통계를 보려면 "프로필" 라디오 버튼을 클릭하십시오.