テンソル
インポートトーチ X = torch.ones(2、2、requires_grad = TRUE) #Trueに.requires_gradプロパティセットは、それが(トラック)すべての操作その上を追跡し始めます。計算が完了したら、あなたはすべての勾配の計算が完了するために)(.backward呼び出すことができます 印刷(X-) 印刷(x.grad_fnを) #各テンソルは、ユーザーが作成した場合を除きテンソル関数(テンソルで作成された.grad_fn性質を持っています場合セット=なしgrad_fn)
#テンソル([[1、1]
#[1、1]]、requires_grad = TRUE) #なし
Y = X + 2 プリント(Y) の印刷(y.grad_fn) #のテンソル([3。、3]、 # [3、3]、grad_fn = <AddBackward0>) #<0x7fecef6f5320でAddBackward0オブジェクト>
attension:彼はgrad_fnていなかったので、xは、直接作成され、それが1 grad_fnを持っているので、yは、加算演算によって作成されました
#葉と呼ばれるノードXのサブメニューこれが直接作成した、サブメニューのリーフノードに対応するgrad_fnはなしで 印刷する(x.is_leaf、y.is_leaf) #真偽
Z = Y * Y * 3 アウト = z.mean() プリント(Z、アウト) #1 テンソル([27、27]、 # [27、27]、grad_fn = <MulBackward0>)テンソル( 27、grad_fn = <MeanBackward0>)
#.requires_grad_()によってインプレース方法requires_gradに変更されたプロパティを使用する A = torch.randn(2,2) #デフォルトrequires_grad = Falseの欠落 (。。 - 1(A * 3)/(A = A )) 印刷(a.requires_grad) a.requires_grad_(真の) 印刷(a.requires_grad) B =(A * A).SUM() 印刷(b.grad_fn) #偽 #真 #<オブジェクトSumBackward0 AT 0x7fecef6d17b8>
勾配
#必要性は要求がスカラとして出ているときに指定されていないので、逆方向コール()可変案内 out.backward() #1 out.backwardに相当する(torch.tensor(1)) プリント(x.grad) #テンソル([ [4.5000、4.5000]、 # [4.5000、4.5000]])
#再び伝播、卒業生ノートが蓄積さ =のOUT2 x.sum() out2.backward() プリント(x.grad) のOUT3 = x.sum() x.grad.data.zero_() out3.backwardを( ) プリント(x.grad) #テンソル([5.5000、5.5000]、 # [5.5000、5.5000]) #テンソル([[1、1]、 # [1、1]])
#Y.backward(W)が必要とされないY、Xが、L = torch.sum(W Y *)Xの誘導体の誘導体。 torch.tensor = X([1.0、2.0、3.0、4.0]、requires_grad = TRUE) Y = 2 * X Z = y.view(2、2 ) 印刷(Z) #テンソル([2、4] 、 # [6、8]、grad_fn = <ViewBackward>)
今、yはスカラーではありませんので、あなたは、重みベクトルyを渡すために、後方の必要性を呼び出すとホルムアルデヒドの仲間がスカラーの合計だったとき
V = torch.tensor([1.0、0.1]、[0.01、0.001]、DTYPE = torch.float) z.backward(V) プリント(x.grad) #のテンソル([2.0000、0.2000、0.0200、0.0020] )
#割り込み勾配追跡 X-torch.tensor =(1.0、requires_gradを= TRUE) Y1 = X - ** 2 torch.no_grad()と: #とY2勾配のみだろう関連勾配Y1に、リターンに関連しません返す ** 3 = - X Y2 Y3 = Y1 + Y2 印刷(X-、x.requires_grad) 印刷(Y1、y1.requires_grad) 印刷(Y2、y2.requires_grad) #1 あなたはy2.backward呼び出すことはできませんので)(、偽を 印刷します( Y3、y3.requires_grad) #テンソル(1.、requires_grad)= TRUE TRUE #テンソル(1.、grad_fn = <PowBackward0>)真 #テンソル(1)偽 #テンソル(2、grad_fn = <AddBackward0>)トゥルー
y3.backward() プリント(x.grad) #のテンソル(2)
その後、tensor.data上で動作することができる、テンソルの値を変更したいのですが、(すなわち、バックプロパゲーションに影響を与えません)autogradを記録する必要はありません
X = torch.ones(1、requires_grad = TRUE) プリント(x.data) プリント(x.data.requires_grad) Y = 2 * X x.data * = 100 y.backward() プリント(X) プリント(X。卒業生) #1 テンソル([1]) #偽 #のテンソル([100]、requires_grad = TRUE) #1 テンソル([2])