【Keras 입문(3)】TensorBoard로 보이기

입문자를 향해 Keras의 초보를 해설합니다.
TensorBoard를 포함하여 Google 공동체을 사용하고 있기 때문에 로컬 환경 준비조차하지 않습니다. Google Colaboratory에 대한 자세한 내용은 Google Colaboratory 개요 및 사용 절차 (TensorFlow와 GPU를 사용할 수 있음) 문서를 참조하십시오.

이하의 시리즈로 하고 있습니다.
  • 【Keras 입문(1)】 단순한 딥 러닝 모델 정의
  • 【Keras 입문(2)】훈련 모델 보존(Keras 모델과 SavedModel)
  • 【Keras 입문(3)】TensorBoard로 보이기
    <-이 기사
  • 【Keras 입문(4)】Keras의 평가 함수(Metrics)
  • 【Keras 입문(5)】간단한 RNN 모델 정의
  • 【Keras 입문(6)】간단한 RNN 모델 정의(최종 출력만 사용)
  • 【Keras 입문(7)】간단한 Seq2Seq 모델 정의

  • 또, TensorBoard에 대해서는 이하의 기사를 참조해 주세요.
  • 【TensorBoard 입문】TensorFlow 처리를 보이게 해 이해를 깊게 한다
  • TensorFlow 튜토리얼 MNIST(초보자용)를 TensorBoard에서 보이게 한다
  • 【TensorBoard 입문:image편】TensorFlow 화상 처리를 보이게 하여 이해를 깊게 한다
  • 【TensorBoard 입문:Projector편】TensorFlow 처리를 멋지게 보이게 한다

  • 사용한 파이썬 라이브러리



    Google 공동체에서 설치된 다음 라이브러리와 버전을 사용하고 있습니다. Keras는 TensorFlow에 통합된 것을 사용하기 때문에 순수한 Keras는 사용하지 않습니다. 파이썬은 3.6입니다.
  • tensorflow: 1.13.1
  • Numpy: 1.16.3

  • 파이썬 프로그램



    전체 프로그램은 GitHub에 있습니다. 딥 러닝 모델에 대한 자세한 내용은 기사「【Keras 입문(1)】간단한 딥 러닝 모델 정의를 참조하십시오.

    콜백 및 TensorBoard 로그 저장



    Keras에서 TensorBoard 로그를 저장하려면 콜백이라는 기능을 사용합니다. 이것은 훈련 중에 호출할 수 있는 메커니즘입니다.
    문서 「【Keras 입문(1)】간단한 딥 러닝 모델 정의」에서 사용한 fit 함수에 전달하여 사용할 수 있습니다.
    model.fit(data, labels, epochs=300, validation_split=0.2, callbacks=li_cb)
    

    경험하지 않지만 fit_generator 함수에도 사용할 수있는 것 같습니다.

    fit 함수에 전달하는 li_cb라는 변수는 다음과 같이 정의됩니다. 배열을 사용하면 콜백에서 여러 기능을 사용할 수 있습니다. 이번에는 TensorBoard 함수을 사용하여 TensorBoard 로그를 저장합니다. 저장처는 타임스탬프를 부가한 폴더명으로 해 둡니다. 여러 번 실행하면 구별하기 쉽고 편리합니다.
    from datetime import datetime
    from tensorflow.keras.callbacks import Callback, TensorBoard
    
    # TensorBoardのログ保存先(タイムスタンプを付けておくと見るときに便利)
    logdir = "log/run-{}/".format(datetime.utcnow().strftime("%Y%m%d%H%M%S"))
    
    # CallBackの指定
    li_cb = []
    li_cb.append(TensorBoard(log_dir=logdir, histogram_freq=1, write_graph=True, write_grads=True))
    

    Google Colaboratory에서 TensorBoard 보기



    TensorFlow2.0을 사용하면 Google Colaboratory에서 TensorBoard를 쉽게 사용할 수 있습니다. 입니다만, 2019년 5월 시점에서의 디폴트의 TensorFlow1.13.1에서는 사용할 수 없기 때문에 한 번 번거롭게 합니다.

    ngrok이라는 공개 URL로 표시하는 서비스를 사용하여 TensorBoard를 공개합니다.
    먼저 wget으로 가져와 unzip합니다.
    !wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
    !unzip ngrok-stable-linux-amd64.zip
    

    tensorboard를 시작하고 ngrok에 게시합니다.
    get_ipython().system_raw(
        'tensorboard --logdir {} --host 0.0.0.0 --port 6006 &'
        .format(logdir)
    )
    # Tunnel port 6006 (TensorBoard assumed running)
    get_ipython().system_raw('./ngrok http 6006 &')
    

    cURL로 공개 URL 정보를 가져옵니다. URL을 열면 TensorBoard 화면입니다!
    물론 로그를 다운로드하여 로컬 PC에서 볼 수도 있습니다.
    # ここで表示されたURLを開く
    ! curl -s http://localhost:4040/api/tunnels | python3 -c \
        "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
    

    좋은 웹페이지 즐겨찾기