今度は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が見ることができた。なんだか不思議な感じです。

Open CVのためにMac初期化

前の仕事退職前からPythonや機械学習を勉強しようと思って、何冊か本を買って勉強中。それぞれの本に忠実にPythonをインストールしたり、もともと研究や仕事で使っていたQGISのPythonも(たぶん)あって、Macの中はゴチャゴチャ。

そんな中、すぐに使える! 業務で実践できる! Pythonによる AI・機械学習・深層学習アプリのつくり方の第3章に取りかかろうとしてopenCVが動かずにスタック(実際には前のMacでは動いていたけど、12月に買い替えたMacで動かない…)

インストーラーパッケージでインストールしたAnacondaのJupiter Notebookを使っているけれど状況はJupyter NotebookでopenCVをimportしようとすると”ImportError:No module named cv2″が出てしまうの記事と同じ。

import cv2

とすると、

ImportError:No module named cv2

となる。

上記記事では、condaを使ってとなっているけれど、残念ながらcondaもうまく動かず。(この時点で、anacondaをどうインストールしたかも記憶なし…)condaがないことについては、anacondaをインストールしたのにcondaコマンドがなかったにやり方があったので、同じように

% echo "source ~/anaconda3/etc/profile.d/conda.sh" >> ~/.zshrc

としてたしか動くようになった(記憶なし…)

でもOpen CVをインストールできず。仕方なく、いちどAnacondaを消してみようとanaconda-cleanを使ってアンインストール(Anaconda3をmacOSから完全にアンインストールする方法)。それから再インストールはhomebrewも使ってなにかに忠実にと思い、HomebrewのインストールからpyenvでPythonのAnaconda環境構築までメモを参考にさせてもらい、Anacondaもコマンドラインでインストール。

が、やっぱりOpen CVをインストールできず。さらにはcondaも動かせなくなる。どうにも手詰まり。もうこうなれば最初からきれいにインストールしようとMac初期化を決行。

↑ここまで背景

で、なにかに忠実にインストールしておこうと思い、Anaconda を macOS にインストールする手順を参考に、Homebrewもpyenvも使わずにインストーラーでインストール(とりあえず現時点では違うバージョンのpythonなど使う予定はないし)。

環境は以下の通り

  • macOS Catalina (Version 10.15.2)
  • Anaconda 2019.10 Python 3.7 version 64-Bit Graphical Installer

インストール後、ターミナルで

% conda --version

とすると、返ってくるのは

zsh: command not found: conda

ここはこれまで色々調べてきた中で、ターミナルがbashからzshになったのが理由ということで、macOS CatelinaにAnacondaをインストールする(zshでの不具合対応)を参考にさせていただき、ターミナルで、

% touch .zshrc

としてファイルを作成。

% open ~/.zshrc

で、ファイルを開いて、

export PATH="/Users/[ユーザー名]/opt/anaconda3/bin:$PATH

と記述して保存。最後に、

% source ~/.zshrc

これで改めて

% conda --version

とすると

conda 4.8.1

と出てきた。

ようやく使えるように。。。肝心のOpen CVはとりあえずAnacondaのEnvironmentsからインストールしてJupiter Notebookでは使えるようになった。(ターミナルからはまだ…)

どうインストールするか、事前によく調べて、どうインストールしたか記録しておくのはホント重要と思ったものです。

QGISも改めてQGIS 3.10.2 ‘A Coruña’をインストールして無事に今のところ動作してる。