目錄
第1關:Variable
任務描述
編程要求
測試說明
沒有偉大的愿望,就沒有偉大的天才。——巴爾扎克開始你的任務吧,祝你成功!
第2關:Variable 屬性
任務描述
編程要求
測試說明
真正的科學家應當是個幻想家;誰不是幻想家,誰就只能把自己稱為實踐家。 —— 巴爾扎克開始你的任務吧,祝你成功!
第3關:梯度初探
任務描述
編程要求
測試說明
科學的界限就像地平線一樣:你越接近它,它挪得越遠。——布萊希特開始你的任務吧,祝你成功!
第4關:梯度進階
任務描述
編程要求
測試說明
真正的科學家應當是個幻想家;誰不是幻想家,誰就只能把自己稱為實踐家。 —— 巴爾扎克開始你的任務吧,祝你成功!
第1關:Variable
恭喜大家進入 ?Pytorch 最為核心的學習——autograd,這是 ?Pytorch 中區別其他機器學習庫的一個重要元素。準備好了嗎?讓我們一探它的廬山真面目吧!
-
任務描述
本關任務:本關提供了一個張量變量tensor ,根據所給的張量創建 Variable 變量v,同時要求同學們掌握 Variable 的相關屬性,例如如何獲得 Variable 的 data 屬性。
-
編程要求
本關涉及的代碼文件為 createVariable.py,本次編程任務是補全右側代碼片段中 Begin 至 End 中間的代碼,具體要求如下:
根據所給的張量創建 Variable 變量 v。
具體請參見后續測試樣例。
-
測試說明
本關涉及的測試文件為 createVariable.py ,運行用戶填寫后的程序判斷正誤。
根據程序的輸出判斷程序是否正確,若正確則輸出下面的預期輸出,否則報錯。
請注意輸出格式及規范。
以下是測試樣例:
測試輸入:
預期輸出:
Variable containing:
?1 ?4 ?2
?3 ?1 ?4
[torch.FloatTensor of size 2x3]
沒有偉大的愿望,就沒有偉大的天才。——巴爾扎克
開始你的任務吧,祝你成功!
import torch
from torch.autograd import Variable
tensor = torch.FloatTensor([[1,4,2],[3,1,4]])#/********** Begin *********/
v = Variable(tensor,requires_grad=True)
#/********** End *********/
print(v)
第2關:Variable 屬性
本關將介紹 Variable 屬性方面的知識,讓同學們對其更加熟悉,便于掌握。
-
任務描述
本關要求掌握Variable 的基本屬性及其意義,如requires_grad屬性標記著該Variable 是否需要求導。
本關任務:本關提供了一個32位浮點型的張量 x,要求同學們根據 x創建一個Variable類型的變量 y, y是由 x 的平方計算得到,并輸出y的Requires Gradiet屬性和Gradient屬性。
-
編程要求
本關涉及的代碼文件為attributes.py,本次的編程任務是補全右側代碼片段中Begin至End中間的代碼,具體要求如下:
創建一個變量 ?y,由 ?x 的平方計算得到,并輸出;
輸出 y 的Requires Gradient屬性;
輸出 y 的Gradient屬性。
具體請參見后續測試樣例。
-
測試說明
測試過程:
本關涉及的測試文件為attributes.py,運行用戶填寫后的程序判斷正誤。
根據程序的輸出判斷程序是否正確,若正確則輸出下面的預期輸出,否則報錯。
請注意輸出格式及規范。
以下是測試樣例:
測試輸入:
預期輸出:Variable containing:
?1
?4
?9
[torch.FloatTensor of size 3]Requires Gradient : True?
Gradient : None?
真正的科學家應當是個幻想家;誰不是幻想家,誰就只能把自己稱為實踐家。 —— 巴爾扎克
開始你的任務吧,祝你成功!
import torch
from torch.autograd import Variable
import warnings
# 忽略特定警告
warnings.filterwarnings("ignore", message="The .grad attribute of a Tensor that is not a leaf Tensor is being accessed.*") x = torch.FloatTensor([1,2,3])
x = Variable(x, requires_grad=True)#/********** Begin *********/
#創建一個變量 y,由 x 的平方計算得到
y = x * x
#按照要求輸出y相應的屬性
print(y)
print('Requires Gradient : %s ' % (y.requires_grad))
print('Gradient : %s ' % (y.grad))
#/********** End *********
第3關:梯度初探
接下來讓我們一探神秘的梯度求導吧!
-
任務描述
結合上一關卡所介紹的Variable屬性,我們將進一步學習Variable的反向傳播函數backward,從而計算出其梯度的大小。
本關任務:
本關提供了一個 Variable 類型的變量x,并將x的 requires_grad設置為True,以便后續的求導操作。在 x 基礎上進行相應的運算得到y ,在 y的基礎上進行運算得到z,令變量out為 z 的平均值,計算out 的梯度并輸出x的梯度值。求導計算的步驟如下所示:
-
編程要求
本關涉及的代碼文件為gradient.py,本次編程任務是補全右側代碼片段中Begin至End中間的代碼,具體要求如下:
在 x 基礎上進行運算, y = x + 2;
在 y 基礎上進行運算, z = y * y * 3;
令變量out為 z 的平均值并輸出;
計算 out 的梯度并輸出x的梯度值;
具體請參見后續測試樣例。
-
測試說明
測試過程:
本關涉及的測試文件為gradient.py,運行用戶填寫后的程序判斷正誤。
根據程序的輸出判斷程序是否正確,若正確則輸出下面的預期輸出,否則報錯。
請注意輸出格式及規范。
以下是測試樣例:
測試輸入:
預期輸出:output:
?Variable containing:
?40.5000
[torch.FloatTensor of size 1]Variable containing:
?3.0000
?4.5000
?6.0000
?7.5000
[torch.FloatTensor of size 4]
科學的界限就像地平線一樣:你越接近它,它挪得越遠。——布萊希特
開始你的任務吧,祝你成功!
import torch
from torch.autograd import Variable x = Variable(torch.Tensor(range(4)), requires_grad=True)
#/********** Begin *********/
#在 x 基礎上進行運算, y = x + 2
y = x + 2
#在 y 基礎上進行運算, z = y * y * 3
z = y * y * 3
#令變量 out 為 z 的平均值并輸出
out = z.mean()#計算 out 的梯度并輸出x的梯度值
out.backward(retain_graph=True)
print('output:')
print(out.item())print(x.grad)
#/********** End *********
第4關:梯度進階
在上一關卡中,我們學習了利用.backward ()對Variable 變量進行反向傳播求導,本關將介紹另一種求解梯度的方法——torch.autograd.grad。
-
任務描述
本關任務:
本關提供了Variable 類型的變量x和Variable 類型的變量y,并將x 和y的requires_grad設置為True以便后續的求導操作。在 x和y的基礎上進行運算得到z,利用torch.autograd.grad方法求梯度 dz_dx和dz_dy。
-
編程要求
本關涉及的代碼文件為autograd_grad.py,本次編程任務是補全右側代碼片段中Begin至End中間的代碼,具體要求如下:
計算 z = x*x + 3*y;
求梯度 dz_dx和dz_dy 并輸出;
具體請參見后續測試樣例。
-
測試說明
測試過程:
本關涉及的測試文件為autograd_grad.py,運行用戶填寫后的程序判斷正誤;
根據程序的輸出判斷程序是否正確,若正確則輸出下面的預期輸出,否則報錯;
請注意輸出格式及規范。
以下是測試樣例:
dz_dx:?
?(Variable containing:
? 2 ? 4 ? 6
? 8 ?10 ?12
[torch.FloatTensor of size 2x3]
,)
dz_dy:?
?(Variable containing:
?3 ?3 ?3
?3 ?3 ?3
[torch.FloatTensor of size 2x3]
,)
真正的科學家應當是個幻想家;誰不是幻想家,誰就只能把自己稱為實踐家。 —— 巴爾扎克
開始你的任務吧,祝你成功!
import torch
from torch.autograd import Variablex = Variable(torch.unsqueeze(torch.linspace(1, 6, 6), dim = 1).view(2, 3), requires_grad=True)y = Variable(torch.Tensor(2, 3).uniform_(-1, 1), requires_grad=True)#/********** Begin *********/
#計算 z = x*x + 3*y
z = x*x + 3*y#求dz_dx和dz_dy 并輸出
dz_dx = torch.autograd.grad(z, x, grad_outputs=torch.ones_like(z))
dz_dy = torch.autograd.grad(z, y, grad_outputs=torch.ones_like(z))
print("dz_dx: \n",dz_dx)
print("dz_dy: \n",dz_dy)
#/********** End *********/