[Tensorflow] 2-4. Tensorboard

Tensorboard

이때까지는 텐서플로우로 모델을 만들어서 그 결과를 print()함수를 이용해서 출력함으로써 학습의 경과를 볼 수 있었다. 하지만 epoch이 더 많아진다면 값을 출력하는것만으로 모델을 파악하기는 힘들어질것이다. 이때 유용하게 사용될 수 있는 도구가 'Tensorboard'이다. 텐서보드는 학습에 사용되는 각종 지표들의 변화를 손쉽게 시각화 해준다.

Visualize Learning
학습의 과정을 시각화하려면 시각화 하려는 데이터를 tf.summary 모듈을 이요하여 중간중간 파일로 기록해놨다가, 학습이 종료되면 이 파일을 텐서 보드가 읽고 시각화 하는 방식이다.

Using Tensorboard with Keras Model.fit(()

케라스 Model.fit()을 사용하는 학습이라면 tf.keras.callback.TensorBoard 를 이용하여 사용할 수 있다.

1
2
log_dir="./logs/fit/"
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)
cs

log_dir 은 학습의 경과가 저장될 경로이다. 임의로 지정해주면 된다.
tf.keras.callbacks.Tensorboard() 의 호출로 로그 파일이 생성되고 저장된다. 추가로 지정해준 histogram_freq=1 옵션은 histogram의 연산이 매 epoch 마다 계산되도록 하는 것이다. default 옵션은 off이다.
그리고 model.fit() 내에서 callbacks 옵션으로 넣어주면 된다. 예를 들면 아래처럼,

1
2
3
4
5
model.fit(x=x_train, 
          y=y_train, 
          epochs=5
          validation_data=(x_test, y_test), 
          callbacks=[tensorboard_callback])
cs

이전에 작성한 imdb 관련 파일을 이용해 실습해보려했으나, windows + Anaconda jupyter notebook 환경에서는 오류 'ProfilerNotRunningError'가 발생하고 실행이 되지 않았다. directory를 바꿔보는 등 여러가지를 찾다가

https://github.com/tensorflow/tensorboard/issues/2819

이 글을 참고하고
callbacks = [tensorflow.keras.callbacks.TensorBoard(log_dir=logdir, histogram_freq=1, profile_batch = 100000000)]
옵션을 추가했다. 
원인은 정확히 알아내지 못했지만 작동됨을 확인했다.

학습을 마친 뒤

1
%tensorboard --logdir logs/fit/imdb [--host=127.0.0.1]
cs

코드를 실행하면 텐서보드가 실행된다. host옵션은 어제 할때는 없어도 잘 동작되다가 다음날 실행해보니 텐서보드가 'localhost에서 연결을 거부했습니다' (localhost refused to connect) 에러가 발생하면서 텐서보드 실행이 되지 않아서 찾아보다가 발견한 해결책이다.
localhost:6006 으로 접속하면 웹브라우저에서 확인할 수 있다.


텐서보드는 다양한 요소들을 출력해준다. 먼저 제일 위에 메뉴를 살펴보자
1. Scalar dashboard
loss와 metrics의 매 epoch 마다의 변화들을 출력해준다. training speed, learning rate 와 다른 scalar 값들을 측정할 때도 사용된다.
2. Graphs dashboard
내가 설계한 모델을 시각화해서 보여준다. 사용자가 뜻한대로 맞게 모델이 설계되었는지 쉽게 확인할 수 있다. 예를 들어 앞선 imdb 이용 keras 모델에서 사용한 코드를 보면

1
2
3
4
5
model=keras.Sequential()
model.add(keras.layers.Embedding(vocab_size,16))
model.add(keras.layers.GlobalAveragePooling1D())
model.add(keras.layers.Dense(16, activation=tf.nn.relu))
model.add(keras.layers.Dense(1, activation=tf.nn.sigmoid))
cs

이 모델은 텐서보드의 그래프 탭에서 아래와 같이 나타난다.


3. Distributions & Histograms

각 Tensor들의 모델에 대한 기여도를 시간에 따라 보여주는 섹션이다. weight와 bias를 시각적으로 확인하기에 유용하고 사용자가 예상한 방향에 맞게 변하고있는지 확인할 수 있다.

Using Tensorboard with other methods

keras모델 사용 이외에 기존에 사용하던 tf.GradientTape()과 tf.Summary를 이용해서도 Tensorboard를 이용해 볼 수 있다. 대신 tf.data.Dataset을 이용해 batch를 사용하자


1
2
log_path = "./logs"
writer = tf.summary.create_file_writer(log_path)
cs

summary 값을 logs 폴더에 저장하게된다.

1
2
%load_ext tensorboard
%tensorboard --logdir logs 
cs

그리고 위 명령어들로 텐서보드를 실행할 수 있다. '%'을 쓰면 터미널 명령어를 주피터 노트북 내부에서 사용할 수 있는 magic command가 실행된다. 터미널에서 작업할때는 %를 넣어주지 않아도 된다. [directory]에는 위에서 지정해준 로그 파일이 저장된 경로를 넣어주면된다. 예를 들어 logs폴더 밑에 xor 폴더에 저장했다면 'logs/xor'로 지정해주면 된다.






No comments:

Powered by Blogger.