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