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

텐서 보드 시작하기

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 를 사용하는 방법을 보았습니다.