blog.tmp.tokyo

航空機撮影の記録

【今度こそ】「ゼロから作るDeep Learning」をiPhoneのCarnetsだけで学ぶ

少し間が空きました。

ご報告

昨年の7月から始めていたザ・レスポンスの20万円の講座「セールスライター認定コース」の半年の講座が終了したのが昨年末。それから認定試験に向けてコツコツと課題に取り組んできました。

令和2年2月11日(火) ついに課題を仕上げて提出しました。採点が行われて認定資格の合否が判定されます。結果が出るまではおおよそ1〜2ヶ月とあったので少しのんびり待つつもりです。

深層学習

ひと段落したので、これから少し本業に近いところで前に途中のまま終わっていた Deep Learning の話を勉強再開しようかな、と思い立ちました。

www.blog-tmp.tokyo

www.blog-tmp.tokyo

www.blog-tmp.tokyo

www.blog-tmp.tokyo

www.blog-tmp.tokyo

これまで5回の記事を書いてきました。地味にこの記事はアクセス数を稼いでくれていて、題材にしている「ゼロから作るDeep Learning」の本の人気の高さをうかがわせます。

これまでの振り返り

上の5回の記事で第3章あたりまで進んでました。進むのは良いのですが、問題が発生していて頓挫していました。

Pythonista 3 の Numpy

簡単に言えばパソコンとか Mac でプログラムを書けば問題なく進めることができるのですが、あえて iPhone 上でプログラミングすることに拘りたいので Pythonista3 というアプリを使っていました。

Pythonista 3

Pythonista 3

  • omz:software
  • 仕事効率化
  • ¥1,220

非常に優れた素晴らしいアプリです。1,200円とアプリにしてはやや高額ですが、端末内で完結するプログラミングの処理系が実装されています。その名の通り Python のプログラミングと実行が可能です。

しかし、この中に搭載されている Numpy というライブラリのバージョンが古いため、この本で行うことが一部実行できません。

具体的な話は過去の記事を見ていただくとして、記事を読んでいただいた方からも対処方法などを教えていただいたりしたのですが、どうしても「写経」のように本に書かれていることや提供されたサンプルをほぼ変えることなくプレイ出来ることが望ましいので先に進むことに躊躇しておりました。

Numpy のアップデート

一番やりたかったことは Pythonista 3 の内部に搭載されている Numpy をアップデートしてしまうことです。仕組み的には通常 Mac などで行う場合と同じように、site-packages-3 というフォルダが用意されているので、ここへ新しいバージョンの Numpy を入れれば新しい方を参照してくれるはずなのですが、エラーが出て使えませんでした。

ネットで調べても同じような事例はありつつも解決策は見つからず、あえなく断念することに。

新たに見つけたアプリ

悶々と 2〜3 年経過しているのですが、たまたま Carnets というアプリを見つけました。

Carnets

Carnets

  • Nicolas Holzschuch
  • 仕事効率化
  • 無料

これは Python の実行環境というよりも、Jupyter Notebook の実行環境です。これまでも Jupyter Notebook を iPhone から使うアプリはありましたが、あくまで外部のサイトにアカウント作ってサーバ上で Jupyter Notebook を扱っているだけでした。それはそれでひとつの解決策ではありますが、やはりローカルに拘りたいところです。

その点、この Carnets は完全に iPhone のローカル環境でJupyter Notebook を扱えます。時代がついに追いついてきたのかもしれません。

Jupyter Notebook とは?

機械学習(Machine Learning)や深層学習(Deep Learning)などが話題になり始めたころから一緒に話題になってきましたが、Markdown によるドキュメントと Python によるプログラミング環境(ソース及び実行結果)が共存できる環境です。通常、プログラミング系のドキュメントを書く場合はブログや Wiki などのドキュメント作成の環境にプログラムを張り付け、実行結果を張り付けます。実行そのものは別なところでやっておく形になるわけですが、これが Jupyter Notebook では同一の環境で行うことができるのです。

Numpy のバージョンを確認する

まず最初に最重要課題として使える Numpy のバージョンを確認しておきます。Pythonista 3 だと 1.8.0 だったのでそれより新しいかどうかが焦点です。Carnets で適当に新規ドキュメントを作成し、以下のように Numpy のバージョンを確認するコードを書いて実行します。

gist17a02a6bfdb116258ed521f8ec7e3e1f

素晴らしい。1.16.0 です。これなら過去に躓いたところも問題なくクリアできるはずです。

Gist によるドキュメント管理とブログへの引用

上の結果を見ていただくとわかる通り、Jupyter Notebook の形式をそのまま張り付けています。これは、Carnets(Jupyter Notebook)で作成する *.ipynb という形式のファイルを GitHub のアカウントでそのまま使える Gist で管理しておくと、はてなブログで Twitter の投稿を貼るときと同じように引っ張ってこれるのです。こうすれば Jupyter Notebook で作成したドキュメントをそれほど苦労なくブログの方へ引用できるので超便利です。

そしてアノ問題へ

準備が整ったので Carnets で本の最初から勉強を始めればよいのですが、そもそも先に Pythonista 3 で過去にハマった問題がクリアできるのかが重要です。そこで同じように詰まれば先へは進めませんし。その問題は第 3 章の始めです。Python の pickle というオブジェクトの直列化の機能が正常に動きませんでした。Java で言えば sirializable のところですね。

Jupyter Notebook での画像表示問題

とりあえず結果から言えば前に詰まった問題のプログラムは動いたのですが、問題のプログラムは最後に見つけてきた画像を表示するプログラムなのですが、Carnets で動かしたときに最終結果として画像が出ませんでした。いろいろ調べてみた結果、Carnets がどうこうという以前に Jupyter Notebook そのものが処理結果を画像で出すことに対してひと手間必要のようでした。

いざ実行

↓ 以下、コメントの★の部分が書籍にはない追加した部分です。matplotlib を使って画像をインライン化して表示するのが楽のようでした。これは matplotlib でグラフを描く場合もどうようなので、iPhone だろうと PC だろうと macOS だろうと Jupyter Notebook を使った matplotlib によるグラブ描画の場合は同様の記述になります。

gist79d30d85251ddab893b99273171de2f7

結果はパーフェクトな感じです。試験用の MNIST のデータセットも取得できてローカル環境へ pickle のデータも作成でき、2 回目以降はこれを利用します。また、最終的な画像の表示もできました。

以上により、iPhone で『ゼロから作る Deep Learning』の本を勉強する環境は Pythonista 3 から Carnets へ移行することができたといえます。次回より復習を兼ねて第 1 章から始めていきたいと思います。