ねほり.com

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

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

      2020/07/23

前回の日記で「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年), 機械学習, テクノロジー

  関連記事

Huawei P20 Liteスマホの画面割れを自力でパネル交換してみる

新型コロナウイルス、現在の感染者・死者数(19日午前4時時点) 死者15.7万人 …

金環日食のステマによる人気は凄かった

「金環日食」を舐めてた。 朝7:30という時間、東京で観測できるためテレビ全局( …

社内アイデアコンテストに9件提出して部門長奨励賞を頂く

やり切りました。。 ホールの1ブロック占拠して、9件のデモを展示しました。 顔を …

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

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

2020年の日本を予想した1920年の人物を紹介する

今からちょうど100年前の1920年(大正9年)、ジャーナリスト(国粋主義者)の …

システムトレードで利益を出すには?(ファンド勤めプロからのアドバイス)

一年ぶりに、ヘッジファンドで個人で20億円以上をシステムトレードで運用しているプ …

機械学習で株価予測(交差検証+ROC 曲線とAUCで精度65%)

日本では5つの要因でサラリーマンの給料は上りません。 ① 労働組合の弱体化 ② …

Javaアプレットでテーブルゲームを作りたい

CGIは面白くない。    日々チビチビ作っても、サンプルが …

WordPressのバックアップ、手動アップデート+旧式プラグイン手動アップデート

新型コロナウイルス感染者が増えていますが、国内では緊急事態宣言により18日以降は …

セカンドライフはどこへ消えたのか・・・

「Facebookが日本で流行しない」「セカンドライフが今後主流になる」と言った …