一昨日は、非力なRaspberry Pi 1 Model B+で『AI業界のHello World!』ことMNISTのEpoch 1を実行するのに一晩かかったわけであります。そして、新規導入の
Raspberry Pi 3 Model B+
(そのうち Pi 4 も欲しいのですがね)を取り出し、Raspbianをセットアップした暁には、早速にChainerインストールしてMNISTの学習をやらせてみると誓ったのでした。やってみました。結論から言えば、昨晩走らせたものが今朝には完了していました。やっぱり、Pi 3速い。Pi 1の20倍くらい速い(といって、まだGPUレスのパソコンの方がPi 3の50倍くらい速いのですが)。
まずはChainerのMNIST学習のサンプルプログラムが書き出してくれた、Accuracyのグラフをお目にかけましょう。
多分、これを描くためにはMatplotlibをインストールしておかないとならないと思います。バリデーションのオレンジの線の方を見ると大体98%くらいでサチっている感じもします。Epoch 10くらいで打ち切っても手書き文字認識としての性能はさほど変わらないのかも。そうしたら一晩が半日くらいで済むかね。まあ、Pi 1ではほぼ絶望的だった『学習』がPi 3ならなんとかできた、ということは大きい(何が大きいのだ?)
奇しくも Epoch 20 が50204秒(小数点以下略)。Pi 1 で Epoch 1に50645秒だったですから、先ほど述べたとおり20倍ってことですかね。
細かい数字をパソコン(WSL上のChainer)で実行した結果と比べると、まあ、大筋同じようなもんですが、微妙に違います。ま、AIのアルゴリズムなのでそんなものでしょう、深くは考えますまい、夜も眠れなくなるから。
ちゃんと、結果に辿り着けたので、結構「達成感」ある(といって、やったことはサンプルプログラムをScreenコマンドの制御のもとで起動した、というだけ)のですが、よく考えてみるとMNISTかなり『軽い』ものなあ。以下のグラフもPi 3上のサンプルプログラムが自動生成してくれたもの(多分、Graphvizを忘れずにインストールしておかないとダメ)。
こうして見れば、計算の実体は3層しかないことが分かります。3層なら一応、中にサンドイッチされているレイヤが1枚あるので、「もっとも薄いディープラーニング」と言えますかね。これが一晩ですから、
Pi 1よりは速い Pi 3
ですが、
やらせるAI仕事はよく考えよう
という結論は変わりませぬ。
話は変わりますがPython 2.7はサポート今年いっぱい
今回、久しぶりに pip などを動かして、Python関係のモジュールなどをいろいろインストールしていてやたらと煩かったのが
Python 2.7 のサポートは2020年の1月1日でおしまい
という「警告」の文句でした。いつか来るとは思っていながら、まあいいやと、ずるずる2.7使ってきたのですが、そういわれてみれば後半年。
Python 3.7 に移行せねばな
まあ、私などPython使い始めたのはそれほど長くない。遥かな昔、awkを使っていて、その後「Perlの国からようこそ」みたいなこと言われてPerlに移行し、そして遅ればせながら5,6年前にPythonに切り替えたです。そのとき 「Python 2.7でないと動かない」というモジュールが必要で、Python 2.7でずるずると書いてきました。ただ、大したこと書いてないので、
整数割り算 と print 文 くらい注意すれば移行は出来そうな気がします
こころを入れ替えて、昨日から3.7を一部使うようにしてみたですが、1本目を2.7と3.7の両方で動くようにするのはそれほど面倒でもなかったです(自動変換は使わなかったです)。でも、奥の方で動いている「やつ」が変わったのは感じられました。たまたま、JSONで辞書を入出力していたのですが、ファイルに書き出されていた順番、デフォルトのままでPython 3.7の方は定義したときの順番どおりになっていました。2.7はバラバラですもん。ま、辞書なのでメモリの上に読み込んだ後の動作は別に変わらないですけれども、やっぱり違うね。Raspberry Piで使うのも含めて慣れないとね。