一、實驗目的
1. 掌握Windows下PyTorch 深度學習環境的配置
2. 掌握一種PyTorch開發工具
3. 理解張量并掌握Tensor的常用操作(創建、調整形狀、加、減、乘、除、取絕對值、比較操作、數理統計操作 ?
4. 掌握Tensor與Numpy的互相轉換操作
5. 掌握Tensor 的降維和增維操作
6. 掌握Tensor 的裁剪、索引操作
7. 掌握cuda()函數
二、實驗內容
1. 在Windows或Linux下配置PyTorch 深度學習環境
2. 掌握一種Deep Learning開發工具
3. 張量的創建、調整形狀、加減乘除、取絕對值操作、比較、數理統計操作、與Numpy的互相轉換、降維和增維、裁剪、索引,把Tensor 移到GPU上去。
三、主要實驗步驟及結果
1. 要定義一個64位浮點型Tensor,其值是矩陣:[[1,2],[3,4],[5,6]],并輸出結果。
源碼:
import torchx=torch.DoubleTensor([[1,2],[3,4],[5,6]])print(x)
結果:
2. 創建一個張量a,元素全部是1,尺寸為2×3。并打印出來。
源碼:
import torcha=torch.ones(2,3)print(a)
結果:
3.?創建一個張量b,元素全部是0,尺寸為2×3。并打印出來。
源碼:
import torchb=torch.zeros(2,3)print(b)
結果:
4.創建一個張量c,對角線元素全部是1,尺寸為3×3。并打印出來。
源碼:
import torchc=torch.eye(3,3)print(c)
結果:
5.創建一個張量d,隨機生成的浮點數的取值滿足均值為0、方差為1的正太分布,?尺寸為2×3。并打印出來。
源碼:
import torchd=torch.randn(2,3)print(d)
結果:
6.創建一個張量e,長度為5的隨機排列。并打印出來。
源碼:
import torche=torch.randperm(5)print(e)
結果:
7.創建一個張量f,從1開始到7結束,步長為2。并打印出來。
源碼:
import torchf=torch.arange(1,8,2)print(f)
結果:
8.要定義一個16位整型Tensor,其值是矩陣:[[1,2],[3,4],[5,6]] ,并輸出結果。
源碼:
import torchx=torch.tensor([[1,2],[3,4],[5,6]],dtype=torch.int16)print(x)
結果:
9.構造一個3x2矩陣,不初始化,并輸出結果。
源碼:
import torchx=torch.empty(3,2)print(x)
結果:
10.構造一個3*2的隨機初始化的矩陣,并輸出結果。
源碼:
import torchx=torch.rand(3,2)print(x)
結果:
11.?構造一個矩陣全為 0,而且數據類型是 long,并輸出結果。
源碼:
import torchx=torch.zeros(4,3,dtype=torch.long)print(x)
結果:
12.構造一個數據類型是 long的全0的3*2矩陣,并輸出結果。
源碼:
import torchx=torch.zeros(3,2,dtype=torch.long)print(x)
結果:
13.構造一個值為[1.5, 2]的張量,并輸出結果。
源碼:
import torchx=torch.tensor([1.5,2])print(x)
結果:
14. 根據給出的輸入,得到輸出,并記錄。
輸入:
import torch as t
c = t.Tensor(3,2)
print(c)
輸出:
15. 根據給出的輸入,得到輸出,并記錄。
輸入:
import torch as t
d = t.Tensor(3,2)
e = t.Tensor(d.size( ))
print(e)
輸出:
16.以下每個函數以size=2*3為例,寫出輸入及輸出。
- torch.empty(size)返回形狀為size的空tensor
- torch.zeros(size)全部是0的tensor
- torch.zeros_like(input)返回跟input的tensor一個size的全零tensor
- torch.ones(size)全部是1的tensor
- torch.ones_like(input)返回跟input的tensor一樣size的全tensor
- torch.rand(size) [0,1)內的均勻分布隨機數
輸入:
import torch as tsize=(2,3)input=t.tensor([[1, 2, 3], [4, 5, 6]])a=t.empty(size)b=t.zeros(size)c=t.zeros_like(input)d=t.ones(size)e=t.ones_like(input)f=t.rand(size)print(a,'\n',b,'\n',c,'\n',d,'\n',e,'\n',f)
輸出:
17.創建一個二階張量,長度為8,元素為[0,1,2,3,4,5,6,7],將其改編成形狀為2*4的張量。
源碼:
import torchx=torch.tensor([0,1,2,3,4,5,6,7])y=x.view(2,4)print(y)
結果:
18. a = torch.Tensor([[2,2],[1,4]])
b = torch.Tensor([[3,5],[7,4]])
實現求a與b乘積的操作,并輸出結果。
源碼:
import torcha=torch.tensor([[2,2],[1,4]])b=torch.tensor([[3,5],[7,4]])x=torch.matmul(a,b)print(x)
結果:
19.有兩個張量a = [1, 2],b = [3, 4],比較兩張量大小。
源碼:
import torcha=torch.tensor([1,2])b=torch.tensor([3,4])if torch.all(torch.gt(a,b)):print("a>b")elif torch.all(torch.lt(a,b)):print("a<b")else:print("a=b")
結果:
20.求出張量 a =([2,8])的均值。
源碼:
import torcha=torch.tensor([2,8],dtype=torch.float32)mean_a=torch.mean(a)print(mean_a)
結果:
21.計算Tensor:[-1.2027, -1.7687, ?0.4412, -1.3856]的tan( )值
源碼:
import torchx=torch.tensor([-1.2027,-1.7687,0.4412,-1.3856])y=torch.tan(x)print(y)
結果:
22. 寫出下面程序的結果,并寫出注釋語句含義。
輸入:
import torch
a = torch.arange(4.)
print(torch.reshape(a, (2, 2)))
b = torch.tensor([[0, 1], [2, 3]])
print( torch.reshape(b, (-1,))) ?#將二維張量b的形狀改為一維張量,元素順序不變?
輸出:
23. 寫出下面程序的結果,并寫出注釋語句含義。
輸入:
import torch
x = torch.randn(3, 4)
print(x)
mask = x.ge(0.5)
print(mask)
print(torch.masked_select(x, mask)) # 根據掩碼(大于等于0.5)選擇張量中的對應元素并打印出來
輸出:
24. 寫出下面程序的結果,并寫出注釋語句含義。
輸入:
import torch
x = torch.randn(2, 3)
print( x)
print(torch.cat((x, x, x), 0)) #將張量x沿著第0維方向進行拼接,即按照行方向進行拼接并打印拼接后的張量內容
輸出:
25. 寫出下面程序的結果,并寫出注釋語句含義。
輸入:
import torch
print(torch.eye(3)) # 打印3*3的單位矩陣
輸出:
26. 寫出下面程序的結果,并寫出注釋語句含義。
輸入:
import torch
print(torch.range(1, 4))
print(torch.range(1, 4, 0.5)) ?#打印從1到4的浮點數序列的張量,步長為0.5
輸出:
27. 寫出下面程序的結果,并寫出注釋語句含義。
輸入:
import torch
a = torch.randn(4, 4)
print(a)
b = torch.randn(4)
print(b)
print(torch.div(a, b)) #對張量a和張量b進行逐元素的除法運算,并打印出結果張量
輸出:
28. 寫出下面程序的結果,并寫出注釋語句含義。
輸入:
import torch
exp = torch.arange(1., 5.)
base = 2
print(torch.pow(base, exp)) # 計算并打印2的exp中各個元素對應的次方值
輸出:
29. 寫出下面程序的結果,并寫出注釋語句含義。
輸入:
import torch
a = torch.randn(4)
print(a)
print(torch.round(a)) ?# 打印張量中的各個元素四舍五入最接近的整數值
輸出:
30. 寫出下面程序的結果,并寫出注釋語句含義。
輸入:
import torch
a = torch.randn(4)
print(a)
print( torch.sigmoid(a)) ?#打印張量中每個元素通過Sigmoid激活函數轉換后的結果
輸出:
31. 寫出下面程序的結果,并寫出注釋語句含義。
輸入:
import torch
a = torch.tensor([0.7, -1.2, 0., 2.3])
print(a)
print(torch.sign(a)) ?# 輸出張量通過sign函數轉換為其符號對應的數值
輸出:
32. 寫出下面程序的結果,并寫出注釋語句含義。
輸入:
import torch
a = torch.randn(4)
print(a)
print(torch.sqrt(a)) ??# 輸出張量中每個元素的開平方根
輸出:
33. 寫出下面程序的結果,并寫出注釋語句含義。
輸入:
import torch
a = torch.randn(1, 3)
print(a)
print(torch.sum(a)) # 打印張量中所有元素的和
輸出:
34.?寫出下面程序的結果,并寫出注釋語句含義。
輸入:
import torch
a = torch.randn(4)
print(a)
b = torch.randn(4)
print(b)
print(torch.max(a, b)) ?# 比較兩個張量中對應位置的元素,并返回一個新的張量,其中新的張量中為相應位置的最大值,并打印結果
輸出:
35.?寫出以下輸入的輸出。
輸入:
import torch
a = torch.zeros(2, 1, 2, 1, 2)
print("a =",a)
print("a.size( ) =",a.size( ))
b = torch.squeeze(a)
print("b =",b)
print("b.size( ) =",b.size( ))
c = torch.squeeze(a, 0)
print("c =",c)
print("c.size( ) =",c.size( ))
d = torch.unsqueeze(c, 1)
print("d =",d)
print("d.size( ) =",d.size( ))
輸出:
36.?查資料,說明torch.mul( ) 和 torch.mm( ) 的區別,并輸出以下程序結果。
輸入:
import torch
a = torch.rand(1, 2)
b = torch.rand(1, 2)
c = torch.rand(2, 3)
print(torch.mul(a, b)) ?
print(torch.mm(a, c)) ??
print(torch.mul(a, c)) ?
輸出:
使用torch.mul()函數計算的是兩個形狀相同的張量a和b的元素對應相乘的結果,但是張量a和c的形狀不兼容,進行運算時會報錯;使用torch.mm()計算矩陣乘法,要求第一個矩陣的列數等于第二個矩陣的行數。
四、實驗總結
實驗錯誤截圖如下:
1.如下圖,圖中的錯誤為在調用pytorch的DoubleTensor函數時,不符合語法規范
?
2.如下圖,在比較兩個張量時,不能直接使用大于、小于或等于運算符。可以使用PyTorch提供的函數來進行逐元素的比較,使用torch.gt()、torch.lt()和torch.eq()函數分別進行大于、小于和等于的比較。
3.如下圖,在計算張量均值時,輸入的數據類型不是浮點數或復數會報錯。代碼中輸入的張量 a 是一個整數類型的張量,我們需要將張量轉換為浮點數類型,然后再計算均值。
4.如下圖,報錯的原因是在計算矩陣元素乘法時,兩個矩陣的維度不匹配導致無法進行張量的計算。
?