backward()是pytorch中用來求梯度的方法,可以分為三種情況來使用。
此時可以直接使用out.backwark():
import torch
from torch.autograd import variable
#生成乙個內容為[2,3]的張量,varibale 預設是不要求梯度的,如果要求梯度,
#需要加上requires_grad=true來說明
#這裡的variable是為了設定變數,把a0=2,a1=3設定為兩個變數
a = variable(torch.tensor([2
,3])
,requires_grad=
true
)b = a+
3c = b*
3out=c.mean(
)#求均值
out.backward(
)print
("a="
,a)print
("out="
,out)
print
(a.grad)
#求out對a的偏導
結果為
a= tensor([2
.,3.
], requires_grad=
true
)out= tensor(
16.5000
, grad_fn=
)tensor(
[1.5000
,1.5000
])
將上面的程式寫成數學表示式就是:
求偏導的過程為:
#生成乙個內容為[2,4]的張量,varibale 預設是不要求梯度的,如果要求梯度,
#需要加上requires_grad=true來說明
a = variable(torch.tensor([[
2,4]
]),requires_grad=
true
)b = torch.zeros(1,
2)b[0
,0]= a[0,
0]**2
+a[0,1
]b[0,
1]= a[0,
1]**3
+a[0,0
]out =2*b
#括號裡面的引數要傳入和out維度一樣的矩陣
#這個矩陣裡面的元素會作為最後加權輸出的權重係數
out.backward(torch.floattensor([[
1,2]
("a="
,a)print
("out="
,out)
(a.grad)
#求out對a的偏導
結果為:
a= tensor([[
2.,4
.]], requires_grad=
true
)out= tensor([[
16.,132.]
], grad_fn=
)tensor([[
12.,194.]
])
將上面的程式寫成數學表示式就是:
a 0=
2,a1
=4a_0=2,a_1=4
a0=2,
a1=4b0
=a02
+a1b_0=a_0^2+a_1
b0=a0
2+a
1b 1=
a0+a
13b_1=a_0+a_1^3
b1=a0
+a1
3o ut
0=2b
0=2a
02+2
a1out_0=2b_0=2a_0^2+2a_1
out0=
2b0
=2a0
2+2
a1out
1=2b
1=2a
0+2a
13out_1=2b_1=2a_0+2a_1^3
out1=
2b1
=2a0
+2a
13∂ou
t∂a=
[∂ou
t0∂a
0∂ou
t0∂a
1∂ou
t1∂a
0∂ou
t1∂a
1]=[
82296
]\frac=\begin \frac &\frac \\ \frac& \frac \end=\begin 8 & 2 \\ 2 & 96 \end
∂a∂out
=[∂
a0∂
out0
∂a
0∂o
ut1
∂a
1∂o
ut0
∂a1
∂ou
t1
]=[
822
96]
這兒有個疑問,為什麼上面的程式計算出來是[12,194]呢?大家可以看到這一行傳進去的兩個引數[1,2]
out.backward(torch.floattensor([[
1,2]]))
有:
[ 12
]∗[8
2296]
=[12194
]\begin 1 & 2 \end*\begin 8 & 2 \\ 2 & 96 \end=\begin 12 & 194 \end
[12]
∗[82
296
]=[
121
94]
import torch
from torch.autograd import variable
#生成乙個內容為[2,3]的張量,varibale 預設是不要求梯度的,如果要求梯度,
#需要加上requires_grad=true來說明
a = variable(torch.tensor([[
2,3]
,[1,
2]])
,requires_grad=
true
)w = variable(torch.ones(2,
1),requires_grad=
true
)out = torch.mm(a,w)
#括號裡面的引數要傳入和out維度一樣的矩陣
#這個矩陣裡面的元素會作為最後加權輸出的權重係數
out.backward(torch.floattensor([[
1],[
1]])
)print
("gradients are:{}"
.format
(w.grad.data)
)
結果為:
gradients are:tensor([[
3.],
[5.]
])
在Pytorch中使用tensorboard
在pytorch中使用tensorboard的方法也挺簡單,如果要看網路結構和訓練損失的話基本上和在tf中使用是差不多的。import torch.nn as nn import torch.nn.functional as f import torch.optim as optim import ...
PyTorch中使用指定的GPU
pytorch預設使用從0開始的gpu,如果gpu0正在執行程式,需要指定其他gpu。有如下兩種方法來指定需要使用的gpu。1.類似tensorflow指定gpu的方式,使用cuda visible devices。1.1 直接終端中設定 cuda visible devices 1 python ...
PyTorch中使用指定的GPU
pytorch預設使用從0開始的gpu,如果gpu0正在執行程式,需要指定其他gpu。有如下兩種方法來指定需要使用的gpu。1.類似tensorflow指定gpu的方式,使用cuda visible devices。1.1 直接終端中設定 cuda visible devices 1 python ...