Pytorchは自動的に勾配を解決します

Pytorchの勾配の解を理解するには、まずPytorchの計算グラフの概念を理解する必要があります。計算グラフでは、各変数はノードを表し、各ノードはニューロンを表すことができます。ノード内の変数の勾配を解くために、行列があるとします。

1.、2.、3 4.、5、6。

まず、この行列(2次元テンソル)をPytorchで初期化し、それを計算グラフのノードに配置します。Pytorchでは、ノードはVariableで表されるため、次のコードを記述できます。

インポートトーチ
 から torch.autograd インポート可変

我々はむしろ標準量よりも2次元テンソル(すなわちマトリックス)を作成しているので、エラーベクター(またはテンソル)にのみスカラースカラーまたはスカラー解決が部分Pytorch可能で微分 
x =変数(torch.Tensor([[1.、2.、3.]、[4.、5.、6.]])、requires_grad = True)

ノード間では、requires_gradのパラメーターがあり、システムのデフォルトはFalseです。つまり、変数の勾配は解決できませんが、内部の変数の勾配が必要なので、パラメーター全体にTrueと名前を付ける必要があります。

最後に、xに関する式を他の変数に書き込みます。

y = 2 * x * x + 2 

j = y.mean()

このようにして、Pytorchで表現さた平均の平均値はスカラーからスカラーへ、またはスカラーからテンソルへの偏微分のみを解くことができるので、スカラーであるjの値が取得さます。

これで計算グラフモデルが作成されました。モデル全体でノードは1つしかありません。他の表現はニューロンの重みに相当し、Jは損失関数を表します。 jの勾配を解くためのコードは次のとおりです。

 

j.backward()

 

次に、勾配が解かれ、jに関するxの勾配の値が出力されます。次のパラメーターx.gradは、解かれたxの勾配の大きさを表します。

print" xの勾配は:"、x.grad)

出力:

xの勾配は次のとおりです。
テンソル([[0.6667、1.3333、2.0000 ]、 [ 2.6667、3.3333、4.0000]]

わかりました!

 

おすすめ

転載: www.cnblogs.com/geeksongs/p/12678625.html