今度はTensorboardが動かない

前回、

はOpen CVで躓いたけれど、今回はTensorboard。すぐに使える! 業務で実践できる! Pythonによる AI・機械学習・深層学習アプリのつくり方の第3章は無事にできて、4章の自然言語処理は飛ばして(画像処理&ディープラーニングを勉強したいから)、第5章へ。AnacondaでTensorflowは使えた。

ただ、本に載っているのはVer. 1.xのコードなので、何も気にせずにAnacondaでTensorflowをインストールするとVer. 2.xがインストールされる。すると、本の、test_ml_tb.pyをそのまま実行するとこんなエラーが出る。

yyyy-mm-dd hh:mm:ss: I tensorflow/core/platform/cpu_feature_guard.cc:145] This TensorFlow binary is optimized with Intel(R) MKL-DNN to use the following CPU instructions in performance critical operations:  SSE4.1 SSE4.2 AVX AVX2 FMA
To enable them in non-MKL-DNN operations, rebuild TensorFlow with the appropriate compiler flags.
yyyy-mm-dd hh:mm:ss: I tensorflow/core/common_runtime/process_util.cc:115] Creating new thread pool with default inter op setting: 12. Tune using inter_op_parallelism_threads for best performance.
Traceback (most recent call last):
  File "test_mul_tb.py", line 13, in <module>
    sess = tf.Session()
AttributeError: module 'tensorflow' has no attribute 'Session'

これは、64日目 pip install tensorflowしたら2.0がやってきました。にも書かれている通り、Ver. 2.xではSessionというのを使わなくなったからとのこと。なので、この部分を修正して、

import tensorflow as tf

a = tf.constant(10, name='10')
b = tf.constant(20, name='20')
c = tf.constant(30, name='30')

add_op = tf.add(a, b, name='add')
mul_op = tf.multiply(add_op, c, name='mul')

tf.print(mul_op)

tf.summary.create_file_writer('logs')

とかすれば動くみたい。(最後の行もFileWriterが使えないから修正。でもこれで動くのか未検証)

ただ、とりあえずは本に合わせて進めていきたいのでAnacondaのTensorflowをVer. 1.14.0にダウングレード。test_ml_tb.pyはもともとのコードで問題なく動く。

ただ、問題はその後。TensorBoardで機械学習を視覚化しようというところで、

$ tensorboard --logdir=./logs

とターミナルに入力して実行する必要があるけれど、これを実行すると、

[libprotobuf ERROR external/com_google_protobuf/src/google/protobuf/descriptor_database.cc:393] Invalid file descriptor data passed to EncodedDescriptorDatabase::Add().
[libprotobuf FATAL external/com_google_protobuf/src/google/protobuf/descriptor.cc:1367] CHECK failed: GeneratedDatabase()->Add(encoded_file_descriptor, size): 
libc++abi.dylib: terminating with uncaught exception of type google::protobuf::FatalException: CHECK failed: GeneratedDatabase()->Add(encoded_file_descriptor, size): 
zsh: abort      tensorboard --logdir=./logs

というエラーが出る。

で、海外のサイトとかを見てみると、Anacondaちゃんとインストールしてあるのかといった記述をよく見る。特に、macOS Catalinaだと、ターミナルがbashではなく、zshだからanacondaが公式に出しているインストール方法使ったほうがいいと。ということで、今回はanacondaだけアンインストール(アンインストール方法は前回の記事と同じ)。その後、How to Restore Anaconda after Update to MacOS Catalinaに従って再インストール。optフォルダではなくユーザー名直下にインストールできたので、.zshrcもこのサイトの通り一度書いたものを再修正。

それでもやっぱりTensorBoardは動かない…

さらにいろいろサイトを探し、参考にしたのは、

TensorBoard Fails to Launch, MacOS Catalina

Tensorboard can’t work on Macos Catalina #2985

これらによれば、仮想環境でPython 3.6をインストールして、そこに(condaではなく)pipでTensorflow Ver. 1.xをインストールしろとな。

指示の通り、ターミナルで

$ conda create -n <新しい環境名> python=3.6

とした後に、しつこいようだけどcondaではなく、

$ pip install tensorflow==1.14

として、新しい仮想環境上で、test_ml_tb.pyを動かしたら動いて、そのあとの

$ tensorboard --logdir=./logs

もちゃんと機能して、TensorBoardが見ることができた。なんだか不思議な感じです。