らんだむな記憶

blogというものを体験してみようか!的なー

ゼロつく 2 (4)

ch04 の train.py の実装まで進んだのでいざ実行・・・を CPU 環境でする気にはなれない。

学習には多くの時間(半日程度)が必要になります。

とか書いてあるので無理。Colab で K80 を使う。が、今日現在の環境で実行すると

module 'cupy' has no attribute 'scatter_add'

という残念なお知らせが。理由はよく分からないけど、 消滅した API があるということで*1python 3.x - AttributeError: module 'cupy' has no attribute 'scatter_add' - Stack Overflow とかのようにバージョンを落とせば良いという記事が見つかったので

pip install cupy-cuda110==7.8.0

してみたら、今度は

ValueError: probabilities do not sum to 1

が飛び出た。

pip install cupy-cuda101==7.0.0

まで落としたらご機嫌な感じで動き始めたので、まぁ良し・・・とする。

或は、https://github.com/oreilly-japan/deep-learning-from-scratch-2/blob/84cb914a6469bffcc0ea5302f86df98c453a5767/common/layers.py#L167 のところを

cupyx.scatter_add(dW, self.idx, dout)

にする方法でも回避できるみたい。へ、へぇ・・・。よく分からないけど。

とりあえず古い CuPy を使ったケースでは 15 分くらい?で訓練ループは完了した。

評価については本のサンプルはまぁ良いとして、それ以外適当に単語を入れてみるとあまり良いのか分からない結果も・・・

[query] cat
 surface: 0.62646484375
 script: 0.61376953125
 roadway: 0.59912109375
 passes: 0.58154296875
 ropes: 0.5791015625

[query] dog
 message: 0.69677734375
 lobby: 0.67919921875
 hero: 0.677734375
 goodman: 0.677734375
 blessing: 0.6767578125

[query] game
 neighborhood: 0.64501953125
 digs: 0.61474609375
 theory: 0.6064453125
 word: 0.6044921875
 story: 0.60009765625

本にもあるように

しかし残念ながら、これはうまく解ける問題を筆者のほうで選別したにすぎません。

とあるように、ちょっと違う内容を突っ込むと微妙な結果が返ってくることが分かった。しかしこれでも結構訓練時間がかかっているので、大規模なコーパスだと色々厳しいであろうことが容易に想像される。

p.174 まで完了。次から RNN に突入できる。やっと・・・。

*1:後述の別解から察するに API の所属するモジュールが変わったと言うべきか・・・