shigeyukioba / matchernet

Apache License 2.0
1 stars 1 forks source link

パラメータの更新方法を考える #9

Closed uchihashikenshi closed 4 years ago

uchihashikenshi commented 4 years ago

概要

パラメータの更新方法について、現状の numpy 実装で行くのか、scipy などを使って少し拡張する方針で行くのか、PyTorch や Tensorflow などのライブラリを使って numpy 互換に部分的に書き換えていくのか、全てライブラリ依存で書いていくのかを議論する。

目的

パラメータの更新が

提案内容

かねてより検討していた PyTorch をまずは試してみたい。

タスク

関連

uchihashikenshi commented 4 years ago

PyTorch では、通常の変数は torch.Tensor で定義される(2018年5月頃リリースの PyTorch 0.4以降。それ以前は Variable を定義する必要がある)が、モデルに渡すパラメータについては torch.nn.Parameter としてインスタンス変数に登録する必要がある。これによって、model.parameters() のようにしてモデル内のパラメータを取得でき、例えば、

 model = NN()
 optimizer = torch.optim.Adam(model.parameters(), lr=0.01)

のように書ける。 最もシンプルなのは、torch.Tensor で変数を定義してしまって、掛け算や足し算を PyTorch の仕組みで行うことである。 他にも、np.linalog.inv などを torch.inverse と書けたりする。 return する際に .numpy() することで numpy.array に戻せるので、現状の書き方をほぼ変えずにできるはず。 numpy は cpu 環境でしか動かせないため、cuda() で gpu を使える点はメリット。ただし、cpu 使用下では numpy 実装と比べ速度は若干遅くなることが予想される。

uchihashikenshi commented 4 years ago

https://matchernetdev.slack.com/archives/CP6UQ54CF/p1573553347012700 こちらで議論しているが、numpy を本命としつつも PyTorch やってみようということで落ち着きそう。議論を目的としたこの issue は close する。 PyTorch 版に関しては優先度は高くないので、後日また別で issue たてる。