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

TensorBoard 시작하기

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

기계 학습에서 무언가를 개선하려면 측정 할 수 있어야합니다. TensorBoard는 기계 학습 워크 플로 중에 필요한 측정 및 시각화를 제공하는 도구입니다. 손실 및 정확도와 같은 실험 메트릭을 추적하고, 모델 그래프를 시각화하고, 임베딩을 더 낮은 차원의 공간에 투영하는 등의 작업을 수행 할 수 있습니다.

이 빠른 시작에서는 TensorBoard를 빠르게 시작하는 방법을 보여줍니다. 이 웹 사이트의 나머지 가이드에서는 특정 기능에 대한 자세한 내용을 제공하며, 대부분은 여기에 포함되지 않습니다.

# Load the TensorBoard notebook extension
%load_ext tensorboard
import tensorflow as tf
import datetime
# Clear any logs from previous runs
rm -rf ./logs/

MNIST 데이터 세트를 예로 사용하여 데이터를 정규화하고 이미지를 10 개의 클래스로 분류하기위한 간단한 Keras 모델을 생성하는 함수를 작성합니다.

mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

def create_model():
  return tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(512, activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10, activation='softmax')
  ])
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [==============================] - 0s 0us/step

Keras Model.fit ()과 함께 TensorBoard 사용

KerasModel.fit ()로 훈련 할 때 tf.keras.callbacks.TensorBoard 콜백을 추가하면 로그가 생성되고 저장됩니다. 또한, histogram_freq=1 (기본적으로 꺼져 있음)을 사용하여 모든 에포크마다 히스토그램 계산을 활성화합니다.

다른 훈련 실행을 쉽게 선택할 수 있도록 로그를 타임 스탬프가있는 하위 디렉터리에 배치합니다.

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

log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)

model.fit(x=x_train, 
          y=y_train, 
          epochs=5, 
          validation_data=(x_test, y_test), 
          callbacks=[tensorboard_callback])
Train on 60000 samples, validate on 10000 samples
Epoch 1/5
60000/60000 [==============================] - 15s 246us/sample - loss: 0.2217 - accuracy: 0.9343 - val_loss: 0.1019 - val_accuracy: 0.9685
Epoch 2/5
60000/60000 [==============================] - 14s 229us/sample - loss: 0.0975 - accuracy: 0.9698 - val_loss: 0.0787 - val_accuracy: 0.9758
Epoch 3/5
60000/60000 [==============================] - 14s 231us/sample - loss: 0.0718 - accuracy: 0.9771 - val_loss: 0.0698 - val_accuracy: 0.9781
Epoch 4/5
60000/60000 [==============================] - 14s 227us/sample - loss: 0.0540 - accuracy: 0.9820 - val_loss: 0.0685 - val_accuracy: 0.9795
Epoch 5/5
60000/60000 [==============================] - 14s 228us/sample - loss: 0.0433 - accuracy: 0.9862 - val_loss: 0.0623 - val_accuracy: 0.9823

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

명령 줄 또는 노트북 환경 내에서 TensorBoard를 시작합니다. 두 인터페이스는 일반적으로 동일합니다. 노트북에서는 %tensorboard 라인 매직을 사용합니다. 명령 줄에서 "%"없이 동일한 명령을 실행합니다.

%tensorboard --logdir logs/fit

표시된 대시 보드에 대한 간략한 개요 (상단 탐색 모음의 탭) :

  • 스칼라 대시 보드는 매 세대마다 손실 및 메트릭이 어떻게 변하는 지 보여줍니다. 이를 사용하여 훈련 속도, 학습률 및 기타 스칼라 값을 추적 할 수도 있습니다.
  • 그래프 대시 보드는 모델을 시각화하는 데 도움이됩니다. 이 경우 Keras 레이어 그래프가 표시되어 올바르게 빌드되었는지 확인할 수 있습니다.
  • 분포히스토그램 대시 보드는 시간에 따른 텐서 분포를 보여줍니다. 이는 가중치와 편향을 시각화하고 예상 된 방식으로 변경되고 있는지 확인하는 데 유용 할 수 있습니다.

다른 유형의 데이터를 로깅 할 때 추가 TensorBoard 플러그인이 자동으로 활성화됩니다. 예를 들어 Keras TensorBoard 콜백을 사용하면 이미지와 임베딩도 로깅 할 수 있습니다. 오른쪽 상단의 "비활성"드롭 다운을 클릭하여 TensorBoard에서 사용할 수있는 다른 플러그인을 확인할 수 있습니다.

다른 방법으로 TensorBoard 사용

tf.GradientTape() 와 같은 메서드로 훈련하는 경우 tf.summary 를 사용하여 필요한 정보를 기록합니다.

위와 동일한 데이터 세트를 사용하지만 일괄 처리 기능을 활용하려면tf.data.Dataset 로 변환합니다.

train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train))
test_dataset = tf.data.Dataset.from_tensor_slices((x_test, y_test))

train_dataset = train_dataset.shuffle(60000).batch(64)
test_dataset = test_dataset.batch(64)

학습 코드는 고급 빠른 시작 가이드를 따르지만 측정 항목을 TensorBoard에 기록하는 방법을 보여줍니다. 손실 및 최적화 프로그램 선택 :

loss_object = tf.keras.losses.SparseCategoricalCrossentropy()
optimizer = tf.keras.optimizers.Adam()

훈련 중에 값을 축적하는 데 사용할 수 있고 언제든지 기록 할 수있는 상태 저장 메트릭을 만듭니다.

# Define our metrics
train_loss = tf.keras.metrics.Mean('train_loss', dtype=tf.float32)
train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy('train_accuracy')
test_loss = tf.keras.metrics.Mean('test_loss', dtype=tf.float32)
test_accuracy = tf.keras.metrics.SparseCategoricalAccuracy('test_accuracy')

교육 및 테스트 기능을 정의합니다.

def train_step(model, optimizer, x_train, y_train):
  with tf.GradientTape() as tape:
    predictions = model(x_train, training=True)
    loss = loss_object(y_train, predictions)
  grads = tape.gradient(loss, model.trainable_variables)
  optimizer.apply_gradients(zip(grads, model.trainable_variables))

  train_loss(loss)
  train_accuracy(y_train, predictions)

def test_step(model, x_test, y_test):
  predictions = model(x_test)
  loss = loss_object(y_test, predictions)

  test_loss(loss)
  test_accuracy(y_test, predictions)

요약 작성기를 설정하여 다른 로그 디렉토리의 디스크에 요약을 작성합니다.

current_time = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
train_log_dir = 'logs/gradient_tape/' + current_time + '/train'
test_log_dir = 'logs/gradient_tape/' + current_time + '/test'
train_summary_writer = tf.summary.create_file_writer(train_log_dir)
test_summary_writer = tf.summary.create_file_writer(test_log_dir)

훈련을 시작하십시오. tf.summary.scalar() 를 사용하여 요약 작성자의 범위 내에서 훈련 / 테스트 중에 측정 항목 (손실 및 정확도)을 기록하여 요약을 디스크에 작성합니다. 기록 할 메트릭과 수행 빈도를 제어 할 수 있습니다. 다른 tf.summary 함수는 다른 유형의 데이터를 로깅 할 수 있습니다.

model = create_model() # reset our model

EPOCHS = 5

for epoch in range(EPOCHS):
  for (x_train, y_train) in train_dataset:
    train_step(model, optimizer, x_train, y_train)
  with train_summary_writer.as_default():
    tf.summary.scalar('loss', train_loss.result(), step=epoch)
    tf.summary.scalar('accuracy', train_accuracy.result(), step=epoch)

  for (x_test, y_test) in test_dataset:
    test_step(model, x_test, y_test)
  with test_summary_writer.as_default():
    tf.summary.scalar('loss', test_loss.result(), step=epoch)
    tf.summary.scalar('accuracy', test_accuracy.result(), step=epoch)

  template = 'Epoch {}, Loss: {}, Accuracy: {}, Test Loss: {}, Test Accuracy: {}'
  print (template.format(epoch+1,
                         train_loss.result(), 
                         train_accuracy.result()*100,
                         test_loss.result(), 
                         test_accuracy.result()*100))

  # Reset metrics every epoch
  train_loss.reset_states()
  test_loss.reset_states()
  train_accuracy.reset_states()
  test_accuracy.reset_states()
Epoch 1, Loss: 0.24321186542510986, Accuracy: 92.84333801269531, Test Loss: 0.13006582856178284, Test Accuracy: 95.9000015258789
Epoch 2, Loss: 0.10446818172931671, Accuracy: 96.84833526611328, Test Loss: 0.08867532759904861, Test Accuracy: 97.1199951171875
Epoch 3, Loss: 0.07096975296735764, Accuracy: 97.80166625976562, Test Loss: 0.07875105738639832, Test Accuracy: 97.48999786376953
Epoch 4, Loss: 0.05380449816584587, Accuracy: 98.34166717529297, Test Loss: 0.07712937891483307, Test Accuracy: 97.56999969482422
Epoch 5, Loss: 0.041443776339292526, Accuracy: 98.71833038330078, Test Loss: 0.07514958828687668, Test Accuracy: 97.5

TensorBoard를 다시 열고 이번에는 새 로그 디렉토리를 가리 킵니다. 학습이 진행되는 동안 모니터링하기 위해 TensorBoard를 시작할 수도 있습니다.

%tensorboard --logdir logs/gradient_tape

그게 다야! 이제 더 많은 사용자 지정 시나리오를 위해 tf.summary 콜백과 tf.summary 를 통해 tf.summary 를 사용하는 방법을 살펴 보았습니다.

TensorBoard.dev : ML 실험 결과 호스팅 및 공유

TensorBoard.dev 는 TensorBoard 로그를 업로드하고 학술 논문, 블로그 게시물, 소셜 미디어 등에서 모든 사람과 공유 할 수있는 영구 링크를 얻을 수있는 무료 공용 서비스입니다.이를 통해 더 나은 재현성과 공동 작업을 수행 할 수 있습니다.

TensorBoard.dev를 사용하려면 다음 명령어를 실행하세요.

!tensorboard dev upload \
  --logdir logs/fit \
  --name "(optional) My latest experiment" \
  --description "(optional) Simple comparison of several hyperparameters" \
  --one_shot

이 호출은 퍼센트 접두사 ( % ) 대신 느낌표 접두사 ( ! )를 사용하여 셸을 호출하여 colab 매직을 호출합니다. 명령 줄에서이 명령을 호출 할 때 접두어가 필요하지 않습니다.

여기 에서 예를 보십시오 .

TensorBoard.dev 사용 방법에 대한 자세한 내용은 https://tensorboard.dev/#get-started를 참조 하십시오.