ねほり.com

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

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

      2020/01/12

前回の日記で「Pytorchは難しい」という記載しましたが、このままで終わることはできません。

なぜなら、将来的に「Tensorflow」と「Pytorch」のどちらが生き残るか現時点では分からないからです。

ネットで調べると、PytorchをラップするScikit-Learning互換のニューラルネットワークライブラリ「skorch」というものを見つけました。

今回は「skorch」を試してみます。

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

skorchとは何?

前述通り、PytorchをラップするScikit-Learning互換のニューラルネットワークライブラリです。

つまり、skorchを用いて作成したmodelオブジェクトには、scikit-learnのようにfitやpredictなどのメソッドが一通り揃っています。
 

ただし、マイナーなライブラリで利用者は少ないです。

少ないというか皆無です。比例するようにググっても情報が少ないです。

現在の最新は2019年11月の0.7.0です。

v0.1.0が2017年12月に登場し、Pytorchのバージョンアップに伴い進化してきていますが、未だにalpha版的な扱いです。

コミュニティもあまり活発ではなく、「すき家」のように急に辞めてしまう可能性があります。

ただ、このままではPytorchの学習が進まないので、使ってみます。

インストール

pipでインストールができました。

使い方

結論から言うとScikit-Learning形式なので超簡単でした。

学習モデルの記載方法

これはPytorchの記述をそのまま利用します。

要するに「Define by run」な学習モデルを記載可能です。

学習用データ、検証用データの作成方法

今まで通りです。

ただし、Kerasとはデータのフォーマットの変換形式が異なります。

【Kerasの場合】

【Pytorchの場合】

ただ、Kerasのようにy_train に対してOnehotエンコーディングをすると、うまく学習が進みませんでした・・・(誰か理由を教えて下さい・・・)

学習方法の記載方法

skorch.net に次の3種類が用意されています。

関数説明
NeuralNetscikit-learnライクなmodelオブジェクトを作成するskorchのクラス。GridSearchCV(model, param_grid, scoring=’accuracy’)はできない
NeuralNetClassifier分類器をsklearn風に。Netオブジェクトのforwardメソッドの最後の活性化関数は必ずF.softmax(dim=-1)すること
NeuralNetRegressor回帰をsklearn風に

 

説明を読む限り、少し挙動に制限がありそうです。

初期化の際に、学習の仕方を決めます。パラメータは、PyTorchの関数を使用できます。

  • criterion : 損失関数の設定
  • optimizer : 最適化関数の設定
  • lr : 学習率の決定
  • module : pytorchで実装したnn.Module継承クラス
  • max_epochs : Epoch数
  • batch_size : ミニバッチサイズ
  • device : GPUの設定

その上で、訓練データの学習はScikit-Learning形式で次のように記載します。

予測の記載方法

これもScikit-Learning形式なので簡単です。

なお、skorch.NeuralNetを用いて作成したmodelオブジェクトは、最後のLinear層->log_softmaxの活性化が施された値で「y_pred.shape=(10000, 10)」となります。

このため、y_predに対してargmax(axis=1)を取る必要があります。

結果

出力されたCSVをサブミットすると「scored 0.98585」でKerasの「scored 0.98700」より少し低かったです。なぜ・・・。

なお、実際の出力画面は前回に比べて良くなったエポックに関しては色がつくよう仕様になっています。

まとめ

容易さはKerasと同じレベルです。

しばらくディープラーニングで解く場合には両方で記述するように努力してみます。

ただ「skorch」は癖も強そうなので、早めに「Pytorch」を使えるようになる必要はありそうです。

ソースコード

後学に向けてコメントも多くつけてます。

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

  関連記事

NW-X1060のフォルダ再生対応スクリプト作成

2009年07月05日(日) NW-X1060でフォルダ再生させる テニス部ヘッ …

人工知能で「くずし字」の文字認識の現状調査

日本人の多くは、日本人が150年前の文書が読めません。 家系図調査は「除籍謄本」 …

MSX : 超戦士ザイダー バトルオブペガスの攻略方法

MSXとは? 「MSX」と言うコンピュータをご存知だろうか?  &nb …

就職一ヶ月後の一人暮らし。テレビもネットもないと病んでくる

April 28, 2005 早速、風邪を引きました・・・ 熱があります。体温計 …

知人がダイヤルQ2に繋ぎっぱなしで3万円支払い

眠たい…  大学が春休みになってからテレホの時間になったら眠たいぞ、畜 …

結婚式余興向けに初動画編集

2008年04月06日(日) 今年はあと2本以上作成予定 ずっと動画編集に工数が …

Kerasを使って活性関数・目的関数・最適化手法をまとめる(ディープラーニング)

まだ・・・何も分かっておらず、ディープラーニングで利用されている関数の概要を調べ …

テレビを捨てた放送局、テレビを捨てた家電メーカー

「テレビの視聴者離れが進み、ネットコンテンツが充実し、テレビはオワコン」 と、よ …

ちょっと未来のテレビ「Twitter TV」

2010年10月17日(日) 私の考えるちょっと未来のテレビ 日本人は「にこにこ …

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

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