poipoiです。

技術的ななにかと、そうじゃないなにか。

iPadで「ゼロから作るDeep Learning」を勉強するために必要なこと

わりとニッチな話。

iPad Pro を買ってからというもの、Pythonista3 という iPad 用開発環境で python を書いてます。

Pythonista 3

Pythonista 3

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

で、最近話題のこちらの書籍を iPad を使って勉強しようと思ったのですが、見事にハマったので備忘録。

問題点

本書の学習につかうサンプルソース群がこちらに公開されているのですが

GitHub - oreilly-japan/deep-learning-from-scratch: 『ゼロから作る Deep Learning』のリポジトリ

Pythonista3 からだと MNIST データの読み込みの際にエラーを起こしてしまって使用できません。

なので、ソース群を Pythonista3 用に改造してあげる必要がありました。

先に結論

こちらに改造済みサンプルソース群をアップしてあります。

github.com

使用方法としては、Pythonista3 から StaSh を使って、

wget -o samples.zip https://github.com/poipoi/deep-learning-from-scratch/archive/master.zip
unzip samples.zip 

すればOKです!

細かい話

そもそもなんでエラーが起きていたかというと、内部で使用している pickle が NumPy 配列に対応していないバージョンだったからっぽいです。

なので、NumPy 配列から一旦標準のリストに変換してあげて pickle.dump, pickle.load するように変更しました。

        dataset = _load_img(key_file[key]).tolist()
        with open(get_save_file_path(key), 'rb') as f:
            dataset[key] = np.array(pickle.load(f))

また全データを一気に読み込むとメモリ不足で Pythonista3 が落ちてしまったので

各サンプルデータ毎に生成する pickle データを分けてあげることで落ちないようにすることができました。 (ここら辺は環境によるかも。。。)

    dataset = {}
    for key in key_file.keys():
        if not os.path.exists(get_save_file_path(key)):
            init_mnist(key)
        
        with open(get_save_file_path(key), 'rb') as f:
            dataset[key] = np.array(pickle.load(f))

おわり。

参考サイト

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