Closed uchihashikenshi closed 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
実装と比べ速度は若干遅くなることが予想される。
https://matchernetdev.slack.com/archives/CP6UQ54CF/p1573553347012700
こちらで議論しているが、numpy
を本命としつつも PyTorch
やってみようということで落ち着きそう。議論を目的としたこの issue は close する。
PyTorch
版に関しては優先度は高くないので、後日また別で issue たてる。
概要
パラメータの更新方法について、現状の numpy 実装で行くのか、scipy などを使って少し拡張する方針で行くのか、PyTorch や Tensorflow などのライブラリを使って numpy 互換に部分的に書き換えていくのか、全てライブラリ依存で書いていくのかを議論する。
目的
パラメータの更新が
提案内容
かねてより検討していた PyTorch をまずは試してみたい。
タスク
関連