blog.tmp.tokyo

No Promises Await at Journey's End

「ゼロから作るDeep Learning」をiPhoneのPythonistaだけで学ぶ(2)

お疲れ様です。前回記事の続きです。

tomohiko37-i.hatenablog.jp

将来的に自分は寝ていても会社に行ってお金を稼いで来てくれる素晴らしい AI の開発を夢見て日々勉強中です。

いきなりですが,「iPhoneのPythonistaだけで学ぶ」の部分は今回で終わりです。第3章でようやくニューラルネットワークに突入し,手書き数字認識の問題に入ったところで問題が発生しました。手書き数字の認識に MNIST という機械学習の分野で有名なデータセットを利用するのですが,早い話が実験データです。

これをダウンロードして画像データの NumPy 配列への返還をやってくれるスクリプトが用意されているのですが,この中の一部が iPhone 上の Pythonista で動作しません。というかエラーが出ます。「3.6.1 MNIST データセット」の節です。

import sys, os
sys.path.append(os.pardir)
from dataset.mnist import load_mnist

(x_train, t_train), (x_test, t_test) = load_mnist(flatten=True, normalize=False)

print(x_train.shape)
print(t_train.shape)
print(x_test.shape)
print(t_test.shape)

これを実行すると,以下のようなエラーになります。

Downloading train-images-idx3-ubyte.gz ... 
Done
Downloading t10k-labels-idx1-ubyte.gz ... 
Done
Downloading t10k-images-idx3-ubyte.gz ... 
Done
Downloading train-labels-idx1-ubyte.gz ... 
Done
Converting train-images-idx3-ubyte.gz to NumPy Array ...
Done
Converting train-labels-idx1-ubyte.gz to NumPy Array ...
Done
Converting t10k-images-idx3-ubyte.gz to NumPy Array ...
Done
Converting t10k-labels-idx1-ubyte.gz to NumPy Array ...
Done
Creating pickle file ...
Traceback (most recent call last):
  File "/private/var/mobile/Containers/Shared/AppGroup/.../Pythonista3/Documents/deep-learning-from-scratch/ch03/code0361.py", line 5, in <module>
    (x_train, t_train), (x_test, t_test) = load_mnist(flatten=True, normalize=False)
  File "../dataset/mnist.py", line 106, in load_mnist
    init_mnist()
  File "../dataset/mnist.py", line 79, in init_mnist
    pickle.dump(dataset, f, -1)
_pickle.PicklingError: Can't pickle <built-in function _reconstruct>: import of module 'multiarray' failed

Python には Pickle という機能があり,実行中のオブジェクトをファイルに保存します。Java で言うところのシリアライズ化ですね。時間をかけて作ったオブジェクトを保存しておいて,次回実行するときはそのオブジェクトから処理を続ければ 2 回目以降は処理時間を短縮できます。その dump の処理でコケている様子。

なんとなく multiarray がどうのと言っているので NumPy のバージョンを新しくすればいけそうな気がするのです。実際に PC や mac で実行するとうまくいくので,NumPy のバージョンを調べてみると PC や mac では 1.11.x など新しいものを使用しています。Pythonista で使っている NumPy のバージョンは 1.8.0 でした。この差が原因かどうかはわからないのですが,いずれにしても同じバージョンにして問題を切り分けたいところです。

ただし,Pythonista については NumPy が最初から組み込まれていて追加で pip で入れてもそっちを見てくれないのです。あまり細かな設定とかもできないのでライブラリの参照パスとかも弄れそうにないため,現状 NumPy のアップデートについては保留です。

試しに Pickle の dump とその後の load を簡単なスクリプトで試すと Pythonista 上でも普通に実行できました。mac で作成した *.pkl ファイルのサイズが 54MB くらいだったので,大きいファイルの作成に失敗したのかもしれません。もしくは簡単なスクリプトは文字列でやってみたので,そのくらいはいけるのかもしれませんが,他のオブジェクトだとうまく保存ができないのかもしれません。

とは言ってもエラーの内容が import of module 'multiarray' failed なので,ファイルサイズ云々については違うような気がしています。import に失敗しているみたいなので単純にライブラリ関係でどこかに不整合があるのだと思います。

だが先へ進む

もうちょっと粘って原因を解析するのもいいのですが,あくまで目的は「自分の代わりに会社へ・・・」なので iPhone でできなきゃ mac でやればいいのです。正常に動作している環境があるので,そちらを使います。まあ mac の方がライブラリの追加や更新も自由にできるので都合はよいかもしれません。最後まで iPhone だけでやれれば一番よかったのですが,まずは先に進むことを優先します。

「ゼロから作るDeep Learning」をiPhoneのPythonistaだけで学ぶ

10/28(金)に仕事で東京に来ました。帰るのは10/30(日)なのですが、久々に本屋をじっくり見て回りました。島根県の一つの欠点が本屋が少ないことですが、それを東京に来た時に補っています。

www.blog-tmp.tokyo

最大瞬間風速的にバズった記事になりましたが、その後、この本は読了しています。Google発の機械学習のライブラリであるTensorFlowを題材に、学習のきっかけづくりをしてくれる良い書籍でした。

機械学習をするときはどんなことをするのか、蓄積されたデータから目的のものを探して来てもらうにはどうすればいいのか、そのアプローチの一端に触れることができます。どの分野にもこの手のきっかけづくりとなる書籍があると良いと思います。

次のステップへ

ですが、私の野望は世界征服ではなくAIを搭載した汎用人型決戦兵器に自分の代わりに会社へ行ってもらい、給料を稼いで来てもらうというササヤカナ野望です。これを実現するためには次なるステップに進まねばなりません。

Amazon.co.jpで電子書籍を買うのもいいですが、大きな本屋で目的の本に出会う楽しさもまた捨てがたいものです。

今回はこの本に出会いました。

プログラミング言語Pythonを使ってDeep Learningを学ぶ本です。最初に私が読んだ本はGoogleが開発した機械学習のライブラリであるTensorFlowを「使う」本でしたが、今回の本はTensorFlowのようなライブラリを「作る」本です。

外部ライブラリをほとんど使わず、ゼロからの構築をしながらDeep Learningを学んで行く本です。

使うライブラリ

この本はPython 3系でやります。最低限用意するライブラリはNumPyとMatplotlibのみです。

NumPyは数値計算のためのライブラリでPythonをこの分野で使われる言語のデファクトスタンダードとも言える存在にしている最強のライブラリです。

Matplotlibはグラフを描くためのライブラリです。

処理系

基本的に上記の環境があれば何でもいいのです。Windows, Mac, Linuxを問いません。書籍の中でも特に言及はされていません。

私は学習のしやすさと今後の野望を見据えてiPhoneのアプリであるPythonistaを使うことにしました。

Pythonista 3

Pythonista 3

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

何度か紹介しているアプリですが、¥1,200は安すぎます。価格設定を明らかに間違えているかサービス精神が旺盛なのか、とにかく開発者の懐の深さに脱帽です。こんな素晴らしいアプリを低価格で提供してくれることに敬意を表するアプリです。

これをインストールすると、Python 3.5とNumPyとMatplotlibがそのまま使えます。メジャーな外部ライブラリは最初から入れておいてくれるのも親切です。この二つ以外にもRequestsも入ってたりするので、http通信もすぐできます。

ウォーミングアップ

まずPythonistaでNumPyとMatplotlibの動きを確認しておきました。本の中でも1章は言語の概略とこれらライブラリの使い方になっています。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 6, 0.1)

y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, label="sin")
plt.plot(x, y2, linestyle = "--", label="cos")
plt.xlabel("x")
plt.ylabel("y")
plt.title('sin & cos')
plt.legend()
plt.show()

まんまそのままのコードですが、iPhone上のPythonistaでちくちく打ち込みます。コードアシストがあるので楽だと思います。

実行するとこんな感じです。

サインカーブとコサインカーブを描くスクリプトです。iPhone上でここまでできるのがすごいです。10年前はこんな小さな端末でプログラミングする時代が来るとは思っても見ませんでした。

ということで

すでに2章のパーセプトロンの話を読み進めています。ちなみにこの分野はどうしても数学の知識が必要です。

私はもともと日東駒専のひとつの出身ですが、専門は物理です。なので数学とかは普通に知識がある(思い出せば)ので抵抗なくこの手の本を手に取りますが、高校数学から大学初年度(と言っても今時の高校生とか大学初年度で何やってるのか知りませんが)くらいの数学は知らないと何が書いてあるのか理解できないと思います。

行列(法律関係のテレビ番組ではない。マトリクスのこと)や微分はこの本でも普通に出て来ます。

ただ、数学は別に高校や大学でないと勉強できないわけではないので、このジャンルをやるのに必要な数学を学ぶことはできないことではありません。眠くはなると思いますが。

この本は先を急がずに時間をかけるつもりなので、時々記事を書きます。

爆速で入力する家計簿

先日,Ruby on Rails で Web ブラウザベースの家計簿を自作した話を書きました。

tomohiko37-i.hatenablog.jp

悪くないのですが,やっぱり iPhone で使えた方が便利です。この世の中。そこで「爆速家計簿」と命名して自作でシンプルな iPhone のアプリを作るべ,と思って似たようなのがあるかな,と探してみたところどんぴしゃりなのがありました。

umenon.com

これですよ。これ。作るまでもなく欲しいものがありました。

ということで落として使い始めました。品目とか入れるの面倒なのでカテゴリと金額だけ入れて使えます。細かいことを気にせず,ある程度のカテゴリごとに支出を見たい場合はこれが必要十分なアプリになります。アプリを作って一儲けしようかと思っていたので少々意気消沈ですが,何か別のものを作ります。

再び「君の名は。」を見にいく

なんとなくもう一回くらいみたいので今日の夜のレイトショーを予約しました。会社帰りの自宅近くというのは便利ですね。今度は詳しく映画の内容を記事にしたいところ。

続・TensorFlow を Pythonista3 に入れたかったのですが、ダメそうな気がします。

前フリだけで終わってしまった前回の記事を反省しつつ,今回はいきなり本題に入ります。

tomohiko37-i.hatenablog.jp

結論だけ先に書いておくと,現時点で Pythonista3 に TensorFlow を入れて使えるようにはできなかったのでこの先は FF13 のごとく「敗北の物語」です。なぜ FF13 のことなど言い出したかは前回記事をご覧ください。

StaSh のインストール

まずは Pythonista3 上で shell 環境のようなコンソールを扱えるスクリプト StaSh を入れます。

forum.omz-software.com

英語のサイトですが,一言で言えば Pythonista3 のインタプリタのところで,

import requests as r; exec(r.get('http://bit.ly/get-stash').text)

を実行しろ,ということです。

インタプリタを出す

Pythonista3 を起動します。

f:id:tomohiko37_i:20160827182122p:plain

テーマを変更しているので標準の色とは多少異なります。表示されている内容は変わらないと思います。美しい外見ですね。素晴らしいアプリです。インタプリタを表示するには,この画面の右側から左側へスワイプします。

f:id:tomohiko37_i:20160827182250p:plain

まあこれがわからなかったんですけどね。あちこち調べてみたらスワイプすればいいとありました。そうするとインタプリタの画面が出てきます。Ruby などにもありますが,対話型でプログラムを実行することができる環境です。

f:id:tomohiko37_i:20160827182442p:plain

インストールする

この一番下のところに先ほどの 1 行をコピペして実行します。内容を解説しておくと,

import requests as r

Requests という Python で有名な「人間のための HTTP」と謳うライブラリを取り込みます。Requests は Pythonista3 に標準で入ってます。

r.get('http://bit.ly/get-stash').text

は少し書き直すと,

requests = r.get('http://bit.ly/get-stash')
response = requests.text

という感じでしょうか。実は Requests は最近仕事でもちょっと使ったんです。指定した URL に get で投げて,そのレスポンスの内容をテキストで取得しています。最後に exec で囲んでいるので取得したスクリプトを実行するのでしょう。

これを実行すると,

>>> import requests as  r; exec(r.get('http://bit.ly/get-stash').text)
Downloading https://github.com/ywangd/stash/archive/master.zip ...
Unzipping into /private/var/mobile/Containers/Shared/AppGroup/xxxxx/Pythonista3/Documents/site-packages/stash ...
Preparing the folder structure ...
Installation completed.
Please Restart Pythonista and run launch_stash.py under the Home directory to start StaSh.

というメッセージが画面上に流れます。このまま止まってますのでよく読むと「Pythonista を再起動して StaSh を開始するためにホームディレクトリの直下にある launch_stash.py を実行してください」ということのようです。

iPhone/iPad でアプリの再起動はホームボタンを 2 回素早く押してマルチタスキングの画面を出して,Pythonista を上にスワイプします。そしてもう一度 Pythonista を起動します。

f:id:tomohiko37_i:20160827183644p:plain

下から 2 番目に launch_stash.py がいました。

StaSh を起動する

この launch_stash.py をタップすると,

f:id:tomohiko37_i:20160827184011p:plain

スクリプトが表示されます。実行されるわけではありません。この画面はまずスクリプトの編集画面になりますので。この画面で右上の△が右を向いているアイコンをタップすると実行します。

f:id:tomohiko37_i:20160827184109p:plain

起動しました。あとはみんな大好き shell のコンソール画面です。

TensorFlow のインストールを試みる

それでは次に TensorFlow のインストールを試みます。StaSh を起動した状態で,

export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.10.0rc0-py3-none-any.whl

を実行してみます。まあこの時点で mac 版しかないんでダメかなという気もしていたのですが。

f:id:tomohiko37_i:20160827184404p:plain

なにやらエラーが。単に環境変数へ設定するだけなんでエラーもひったくれもない気がしたんですが,export コマンドがないと。そうですか。ないんですね。ないんじゃしょうがない。

pip install --upgrade https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.10.0rc0-py3-none-any.whl

安易にとりあえず環境変数じゃなくてそのまま URL で書けばいいんじゃね?という結論に。ちなみにこれだと --upgrade オプションがないと怒られたので,最終的に実行したのは,

pip install  https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.10.0rc0-py2-none-any.whl

です。

f:id:tomohiko37_i:20160827184749p:plain

ダメだ。

[~/Documents]$ pip install  https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.10.0rc0-py2-none-any.whl
Working on URL repository ...
Error: cannot find a valid archive file at url: https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.10.0rc0-py2-none-any.whl

Python3 系と 2 系の両方で試してみましたが結果は同じでした。うーん,とりあえず iOS 端末に入れる適当なライブラリが見つからんのかな?実験的に試してみただけなのでとりあえず現時点では諦めました。StaSh を入れることができたので多少は Pythonista についても進展があったので良しとしたいと思います。

さしあたり TensorFlow については引き続き mac で実行しつつ書籍を読み進めます。

TensorFlow を Pythonista3 に入れたかったのですが、ダメそうな気がします。

自他共に認める天性の浪費家です。稼いだお金を貯めずに使い、日本経済の発展のためアベノミクスに貢献する意識高い系の浪費家を目指しています。

tomohiko37-i.hatenablog.jp

FF13を買った

PS3のソフトですが、FINAL FANTASY 13が大好きでした。世間の評価は低かったですが、個人的に大好きでした。いろいろ忙しかったりして3部作最後のライトニングリターンズが途中で終わってしまったのが心残りでしたが、たまにFF13のPVが好きで見てます。

youtu.be

久々にこのシリーズやり直してみようかな、と思い立ち今ならAmazon.co.jpで安くなっているので買い直しました。実は島根に来る際に売り飛ばしたんですわ。

アルティメットヒッツ ファイナルファンタジーXIII

アルティメットヒッツ ファイナルファンタジーXIII

ファイナルファンタジーXIII-2 デジタルコンテンツセレクション

ファイナルファンタジーXIII-2 デジタルコンテンツセレクション

ライトニング リターンズ ファイナルファンタジーXIII

ライトニング リターンズ ファイナルファンタジーXIII

これを購入。そう言えば空の軌跡の3部作も途中でした。買うだけ買う病気が。
(ーー;)

来年のカレンダー

かわにょさん(id:kawanyo)のブログで気になる記事を発見。

kawanyo.hateblo.jp

日めくりカレンダーならぬ「姫繰」らしいです。画集と共に購入です。

姫繰三六五 2017 Edition

姫繰三六五 2017 Edition

姫繰三六五画集 二〇一七年版 上巻

姫繰三六五画集 二〇一七年版 上巻

姫繰三六五画集 二〇一七年版 下巻

姫繰三六五画集 二〇一七年版 下巻

これも日本経済の発展のため。個人の消費を伸ばすことが重要なのであり、私個人の浪費癖が問題なのではなく・・・。
( ;∀;)

家計簿を作った

そんな日本経済のために貢献を続けるワタクシですが、独身貴族どころか独身平民になりつつあるのでお金の管理をきちんとすることに。

家計簿をつけようと思っているのですが、iOSのアプリにピンとくるものがなく、以前Ruby on Railsで作ったのも動かなくなっていた(なんで?)ので、サクッとまたまたRuby on Railsで作りました。

改訂3版 基礎 Ruby on Rails 基礎シリーズ

改訂3版 基礎 Ruby on Rails 基礎シリーズ

これは書籍版と電子書籍版の両方持ってるほど気に入ってます。Rails学ぶならこれが分かりやすくてバイブルになっています。

高坂穂乃果?

で、今時の主流ではHTMLの画面を作るときにBootstrapというスタイルシートとかのライブラリを使うのです。お仕事でも使っていて、これを使って作るとPCで見た画面を小さくしてスマホサイズになったときに自動的にレイアウトを調節してくれるスグレモノ。

Railsに組み込むか、とやり方を探していたら、

qiita.com

Bootatrapのテーマを直して日本語とかきれいに表示されるようなものに調整したHonokaというのがあるらしく。公式っぽいページも。

honokak.osaka

なんか見覚えのあるシルエットが。しかもHonokaをForkした他のテーマにUmiとかNicoとかRinがあるとか。

こいつらラブライバーだ!

ということでHonokaをインストールしました。できればNozomiとかEriとかあるといいんですが。あとMakiとか。誕生日同じなんで。

続きはWebで

すいません。軽く前フリのつもりであれこれ書いていたら本題にたどり着かず。

続きます。