PyTorch v0.4での変更点 - 8月 19, 2018 こんにちは、ぐぐりら(@guglilac)です。 Pytrochをちょうど使い始めたときにバージョンが0.4に上がっていろいろ変わったので、勉強したことをまとめました。 バージョンがまだ小さいので変更点も大きなものが多いため、ちゃんとキャッチアップしていかないとですね。 変更点を全て書いているわけではないのであしからず。 ## tensorとvariable 今までふたつの型があった. Tensor:計算グラフ(勾配情報)を保持しないもの Variable:計算グラフを保持するもの 0.4になるときにこれらは統合された。 Tensor型に`requires_grad`という値が追加された。 `requires_grad=true`が今までのvariable型に相当する感じかな。 defaultのtensor型は`requires_grad`がfalseになっている。 variable型からtensor型を取り出す際は ```python hoge_tensor=hoge_variable.detach() ``` とする。(hoge_variableは`requires_grad=true`であるtensor) `.data`としても取出せるぽいけど、backwardの計算の時にやばいことになりかねないとか書いてあるから 大人しく`.detach()`を使ったほうがいいのかな。 ## 0次元テンソル v0.4になって、ゼロ次元テンソルが追加された。 ゼロ次元テンソルはいわゆるスカラのことで、lossとかを表す。 lossはvariableで返ってきて、そこから値(tensor)を取り出す際に今までは ``` loss.data[0] ``` としていた。 .dataでtensor()を取り出し、その一番目の要素を取りだす、という方法.(今まではスカラは長さが1のtensorで代用していた) 0.4では、こうする。 ``` loss.item() ``` ## GPUの使い方 ```python x = x.to("cuda")#xはtensor model = model.to("cuda")# modelも ``` ## volatile 推論時は順伝搬しかしないから計算グラフを作る必要はない。 以前まではvariableで包む時に`volatile`オプションで計算グラフをつくらないように指定したけど、 variableなくなったから以下のようにして止める。 ``` with torch.no_grad(): # withの中で計算グラフを作りたくない演算を実行 y = x**2 ``` ## 結局 modelの入力データは普通のtensorでいい。 教師ラベルも普通のtensorでいい。(`requires_grad=true`にしないでいい。) modelに入力して得られる出力は`requires_grad=true`であるtensor(つまり今まででいうvariable)が返ってくる. から、必要な処理としてはvariableからtensorを得る方法だけわかってれば大丈夫 この記事をシェアする Twitter Facebook Google+ B!はてブ Pocket Feedly コメント
コメント
コメントを投稿