ねほり.com

何もないから何かみつかる

KaggleのDigit Recognizerで画像分析(Pytorch編)

      2020/01/09

これまでディープラーニング(深層学習)の実装にはKerasを利用していました。

近年は「PyTorchがディープラーニング系ライブラリでは良い」という話を聞きます。

今回はPytorchを使って前回扱ったDigit Recognizer」を解いてみます。

なお、Pytorchも未だPython3.8は未対応です。

[参考] 過去の機械学習関係の記事

なお、結論から言うと理解が追いつかず、学習モデルを構築してKaggleを実施するには敷居が高そうです。

ディープラーニングフレームワーク一覧

近年は様々なフレームワークが登場しています。

  • TensorFlow(テンソルフロー)
  • Keras(ケラス)
  • Chainer(チェイナー)
  • Pytorch(パイトーチ)
  • MXNet(エムエックスネット) Deeplearning4j(DL4j)
  • Microsoft Cognitive Toolkit(マイクロソフトコグニティブツールキット)
  • PaddlePaddle(パドルパドル)
  • Caffe(カフェ)
  • Theano(テアノ)

その中で「Keras(TensorFlow)」「Pytorch」が人気という理解です。

Googleトレンドで確認する限りは、人気は倍近い違いがあるように見えます。

ただ、Pytorchは研究者が続々と採用しており主要な論文が出ると即実装されるなど、R&D界隈では圧倒的に人気が高く、これだけでは判断できません。

Pytorchって何?何が凄いの?

PyTorchとはPython向けのオープンソース機械学習ライブラリで、Facebookの人工知能研究グループにより初期開発されました。

PyTorchは2016年後半に発表された比較的新しいライブラリです。

Kaggleの優勝者のJeremy Howardが「PyTorchの方が使い易い」と言っています。

【メリット】

  • 研究者が続々と採用していて、主要な論文が出ると即座に実装される
  • Define by run。学習処理内にbreakpointを置いたデバッグが可能
  • modelもlayerもどっちも同じModuleクラスという設計なので複雑なネットワークも記述できる
  • tensorオブジェクトにsqueeze、viewなどのメソッドが充実しているのでコードの可読性が高い
  • gpuのon/offが簡単

【デメリット】

  • 学習・予測処理を自分で一から書く必要がある。 dataloaderを作成するところを含めて、学習・予測処理を記述するのが面倒
  • web上の情報が少ない

ようするに、私のような初心者にはPytorchはとっつきにくく難しいという事です。

ですが昨年「PyData.Tokyo Meetup #16 – 深層学習ライブラリ PyTorch」でPytorch押しな講演を聞き、それでもやらねば・・・と思ってます。

Pytorchインストール

そもそもライブラリがPythonのバージョンアップに追従していない問題回避に仮想環境であるAnacondaを使うのが一般的です。

ただしAnacondaで苦い経験があるのでpip使って粛々とインストールしてみます。

※ Python3.6を利用しています。

次のようなエラーが出ました。

ダウンロードサイトから直接ダウンロードしたところ問題を回避できました。

PytorchでCNNを使ったDigit Recognizer実践

Kerasとソースコードを比較しながら理解を深めていきます。

学習モデルをつくる

この部分がディープラーニングで重要な部分です。

【Kerasの場合】

【Pytorchの場合】

Kerasはネットワーク構成を決めてからデータを投げます。

これを「Define and Run」と呼びます。

つまり定義の時点でデータは考えません。

一方でPyTorchがデータを投げて実行しながらネットワークを定義(forward(x)のx部分)します。

これは「Define by Run」と呼ばれます。

このメリットは次のようなものがあります。

  • 柔軟な設計が可能
  • 1イテレーションごとに設計を変えられる

このため、研究者界隈では「Define by Run」が主流です。

学習させる

これで終わっていれば、

PyTorch使ってみようかな・・・・

と思えます。

しかし、モデル(model)と学習データ(x_train, y_train)が用意できてからが大変です。

学習させてみましょう。

【Keras、scikit-learnの場合】

一行です。

【Pytorchの場合】

datasetオブジェクト作成から数えると10行を超える記述が必要になってしまいます。

この部分に正直興味ないのです。

予測させる

こちらもPytorchは面倒です。

【Kerasの場合】

一行です。

【Pytorchの場合】

もう何をしているのか分かりません・・・・。

なぜ、ここまで記述が面倒なのかな・・・。

初心者には敷居が高く、自分で使いこなすのは大変そうです。

ほぼ写経で出てきたアウトプット

とりあえず記事末のスクリプトを動かすと次のような結果を得られます。

5エポックでも計算時間が20分必要でした。

まとめ

難しいの一言。

学習モデル構築は何とかなりそうですが、学習させたり評価させる部分の実装が超面倒です。

このままだと私のような初心者は利用するメリットが全くありません・・・・。

ソースコード

正直、詳細の理解が追いついていません。

 - 2020年(社会人16年), 機械学習, テクノロジー

  関連記事

twitter・ニコニコ・2ちゃんねる実況をテレビ連動してみる

2011年09月04日(日) twitter・ニコニコ・2ちゃんねる実況をテレビ …

LispのオセロのソースコードをC言語に変換して6手読みさせる

知人と釣り さて、昨日古き知人と釣りに行きまして…。  ボウズで終わる …

ドライブAのFATを読み取り中に、データエラー

やはり夏休みは暇でならない。 しかし、従来の休みであれば、プログラム能力はみるみ …

JavaScriptの知識をPhotoShopの自動化に活用

2011年06月12日(日) JavaScriptの知識をPhotoShopの自 …

Google App EngineでPHP利用

アブラハムには7人の子♪一人はのっぽで後はちび♪みーんな、仲良く暮らしてる♪ 黒 …

KaggleのHome Credit Default Risk体験(サブミット編)

ビッグデータ分析、新卒年収は1000万円以上 東大生の人気職種に(産経新聞) 「 …

Windowsのパソコンにパーティションを分けてLinuxを入れてC言語学習を試みる

徒然なるままに日暮らし…  結局、何も変わらぬ日々。  「イ …

2009年テニス納会用に作成した動画

2009年10月30日(金) 残念な感じです・・・V 先週末は、寮でカップラーメ …

情報処理学会「CVIM研究会」で「卒論セッション」発表

さて、2月頃には提出が決まっていた情報処理学会「コンピュータビジョンとイメージメ …

サラリーマンは安泰?誰に仕事を奪われのか?

年収が同期の中でも底辺です・・・ 同期がどれだけ出世しているのか概算しました。 …