TensorFlow 그래프 검사

개요

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 및 메모리 통계를 보려면 "프로필" 라디오 버튼을 클릭하십시오.