MacOS で matplotlib を Python から使用するときのエラーを修正する
エラー詳細
Mac で pyenv でインストールした Python を使用している場合に、
pip でインストールした matplotlib をインポートしようとすると
以下のようなランタイムエラーが出てしまう
RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends.
修正方法
以下のファイルを編集する
Python のバージョンは各環境に応じて変更する必要がある
/.pyenv/versions//3.4.3/lib/python3.4/site-packages/matplotlib/mpl-data/matplotlibrc
上記ファイルを以下のように修正する
backend : TkAgg
TensorFlow の iOS 向けビルド
手順
Xcode のセットアップ
$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
必要なパッケージのインストール
$ brew install automake $ brew install libtool
TensorFlow
$ git clone https://github.com/tensorflow/tensorflow -b r1.0
Configure
$ cd tensorflow
$ ./configure
いくつか質問聞かれます
iOS 向けの静的ライブラリのビルド
tensorflow/contrib/makefile/build_all_ios.sh
以下のファイルが tensorflow/contrib/makefile/gen/lib/
あたりに作成されれば成功
libtensorflow-core.a
, libprotobuf.a
, libprotobuf-lite.a
その他ツールのインストール
Bazel を使って以下もインストール、時間かかる
もしエラーが出てしまった場合は bazel version
でバージョンが 0.1.4 以上か確認する
(指定されているオプションがそれより前は存在しないため) 詳細
bazel build tensorflow/python/tools:freeze_graph
bazel build tensorflow/python/tools:optimize_for_inference
だいたいそれぞれかかった時間は以下の通りで、16GBのMacBook Proで50分くらいかかってしまった
Elapsed time: 541.116s, Critical Path: 0.17s Elapsed time: 2329.343s, Critical Path: 2184.19s
iOS向けGraphファイルの作成
上記の freeze_graph
を使って、以前に作った graph.rb
ファイルと weight や bias を全て一つのファイルにまとめる
bazel-bin/tensorflow/python/tools/freeze_graph \ --input_graph=../tensorflow_try/tmp/graph.pb --input_checkpoint=../tensorflow_try/tmp/model \ --output_node_names=model/y_pred,inference/inference --input_binary \ --output_graph=/tmp/voice/frozen.pb
ここで中断した…
Overall
Python で作成した TensorFlow のモデルを iOS にインストールすることは可能 だがそこまでするメリットがあまりない 具体的には結構ビルドする手間もかかるし、何よりファイルサイズが大きく アプリのサイズとしては現実的ではない なので素直に全てサーバサイドで Web API として提供するのがストレートだと思う
zsh から fish に乗り換えた
Finally, a command line shell for the 90s
特に設定ファイルなどにこだわらずに、そこそこいい感じに動くシェル
自分にとても合っていた
インストール方法
以下でインストールできる
$ brew install fish
$ echo /usr/local/bin/fish | sudo tee -a /etc/shells
$ chsh -s /usr/local/bin/fish
いい感じのオートコンプリートも以下を叩くだけで man の情報などから組み立ててくれるらしい、素敵
$ fish_update_completions
git add がクラッシュした時の対処
エラー
git add -A
を実行した時にクラッシュ
もう一度同じ操作をしようとしても index.lock がすでに存在するため 以下のようなメッセージが出てエラーを吐いてしまう
If no other git process is currently running, this probably means a git process crashed in this repository earlier. Make sure no other git process is running and remove the file manually to continue.
原因
git add
しようとしている中に不正なファイルがありそう
対策
一時的に戻す方法としては以下
rm .git/index.lock
git reset
不必要なファイルは .gitignore
で避ける
今回の場合は virtualenv で作成されたものを git add -A
しようとして発生した
のでこれを使った
virtualenv で TensorFlow をインストールする
virtualenv を使用して TensorFlow をインストールする
こちら で virtualenv を使用した方法が
推奨されていたのでそれに従い行った
1.install pip
$ easy_install pip
2.upgrade virtualenv if needed
$ pip install --upgrade virtualenv
3.create virtualenv environment
$ virtualenv --system-site-packages your_own_directory
4.activate
$ source your_own_directory/bin/activate
5.install tensorflow
$ pip install --upgrade tensorflow
6.validate
$ python try.py
try.py
import tensorflow as tf a = tf.constant([1, 2, 3]) b = tf.constant([4, 5, 6]) session = tf.Session(config=tf.ConfigProto(log_device_placement=True)) print(session.run(a + b))
最後に上記のプログラムが正しく TensorFlow で実行されていれば環境は構築できている