TensorFlowでは、いくつかの画像を処理するための機能が備わっている。これをチェックしてみよう。 やりたいこととしては、TensorFlowを使って、画像の認識をしたり、実際の画像から様々なパラメータを抽出できるようになりたい。
まずは、TensorFlowのチュートリアルの中で最も画像処理っぽい、マンデルブロの表示のチュートリアルについてやってみよう。
http://www.tensorflow.org/tutorials/mandelbrot/index.html
ただ、このチュートリアルでは、ソースコードは断片的にしか公開されておらず、結局どのようなコードを作ればいいのかについてはしっかりと書いていない。 いろいろ試行したがうまくいかないので、先人の作成したソースコードを参照した。
結局やっていることとしては、マンデルブロ曲線を書くためのアルゴリズムを、そのまま実装してrun()を200回繰り返しているだけだ。
以下の式をTensorFlow上で実装しているに過ぎない。
[tex:{ \displaystyle \begin{cases} z_{n+1} &= z_n2 + c \ z_0 &= 0\ \end{cases} }]
zs_ = zs*zs + xs # Have we diverged with this new value? not_diverged = tf.complex_abs(zs_) < 4 step = tf.group(zs.assign(zs_), ns.assign_add(tf.cast(not_diverged, "float32")))
zsはループで繰り返される座標の値、nsはマンデルブローの計算が発散しているかどうかを示している。
iPythonでマンデルブローを表示する
いろいろ調査したのだが、iPythonを使えば、PythonでGUIを使用することができるということが分かった。 さらに、Ubuntuで使用するためには様々なライブラリをインストールしておく必要がある。
$ sudo aptitude install python2.7-scipy python-scipy-dbg python-scipy-doc $ sudo aptitude install ipython-qtconsole $ sudo aptitude install pytho-matplotlib python-matplotlib-data python-matplotlib-dbg
まずは、マンデルブロー集合を、iPythonのインタプリタ上で表示させてみよう。
$ ipython qtconsole $ (出てきたGUIウィンドウ上で) import mandelbrot.py
おー、表示できた。
jpegで保存する
TensorFlowの機能ではないが、jpegで保存する方法もある。
ソースコードのDisplayFractalに、以下を追加しておく。
PIL.Image.fromarray(a).save('mandelbrot.jpg')
これで、画像としてマンデルブロの表示結果が格納されることになる。
$ display mandelbrot.jpg
お、うまくいった。今度は、これを使って、TensorFlowに画像処理をさせる方法を考えていこう。