본문 바로가기

Tensorflow, Python, Deep Learning

텐서플로우 (Tensorflow) + 텐서보드 (Tensorboard) 기초

본 포스팅에서는 tensorflow 2.1 버전으로 텐서보드를 작동시키는 것에 대해 알아본다. 

tensorflow 버전이 2.0 버전이 아니면 버전 에러가 발생하므로 최신 버전으로 upgrade를 하거나 가상환경에 새로운 tensorflow 2.0 버전을 설치하여 테스트 해볼 것을 권장한다. 

 

1.  데이터 없이 Tensorboard 실행

Anaconda 프롬프트를 실행하여 test를 진행할 가상환경을 불러온다. 가상환경 생성방법은 이전 포스팅 자료에 설명이 되어있다.

activate 가상환경이름 으로 가상환경을 활성화 시킨다. 

"testtb"라는 새로운 폴더를 만들고, 이곳에 tensorboard log를 저장해 줄 것이다. 

아나콘다 프롬프트에서 "testtb"로 이동한다. 아래와 같이 tensorboard --logdir명령어를 실행시켜주고 파일 경로는 이동한 경로에 "logs"라는 폴더를 생성하여 저장한다는 의미이다. 

tensorboard --logdir=./logs/

위의 그림과 같이 명령어를 모두 입력하면 "TensorBoard 2.1.0 at http://localhost:6006/" 이 출력되고 localhost:6006를 복사하여 브라우저에 입력한 후 이동한다. 

위와 같이 localhost:6006으로 이동되면, 화면에 현재 dataset을 위해 활성화 한 대쉬보드가 아무것도 없다고 나온다. 

코드를 작성하지 않았기 때문에 empty 현상이 당연한 것이다. 

이제 간단하게 model을 학습하여 테스트를 해보겠다. 

 

1.  Model 학습 후 Tensorboard 실행

새로운 프로젝트를 생성한 후 아래 코드를 컴파일 한다. 

MNIST 데이터를 예제로 input 28x28의 이미지를 neural network로 트레인 시킨 후, neural network의 그래프를 tensorboard에서 확인하기 위한 코드이다. 

# -*- coding: utf-8 -*-



from datetime import datetime
from packaging import version

import tensorflow as tf
from tensorflow import keras

# 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

# 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])

 위의 코드는 일반적인 model을 학습시키는 방법과 다를게 없지만 한 가지 추가된 것이 tensorboard의 callback 부분이다. 

# 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)

위의 코드에서 "logs\\fit\\', 현재 생성된 프로젝트 경로 하위에 logs\\fit\\을 생성하고, tensorboard의 event를 저장한다는 의미이다. 아래 결과와 같이 잘 실행이 되고, 프로젝트가 저장된 폴더에 logs/fit에 생성된 파일들을 확인할 수 있다. 

다시 아나콘다 프롬프트로 돌아와서, 위의 데이터없이 Tensorboard를 실행한 것처럼 똑같은 방법으로 실행한다. 

실행 전에 꼭 프로젝트 경로로 이동해야 한다. 

tensorboard --logdir=./logs/fit/ 

위의 localhost:6006으로 이동하면, tensorboard의 상단 메뉴바-Scalars에 training한 model의 epoch에 따른 accuracy와 loss 의 그래프가 출력된다. 

Graphs 메뉴에서 model의 그래프를 확인할 수도 있다. 

이와 같이 Tensorboard를 이용해서 실시간으로 training 되어지는 모델을 확인할 수 있고, performance graph도 쉽게 확인할 수 있다.