Tensor 與 Pytorch 的關聯就類似於 Array 與 Python,就是一個元素,不用想太多
在開始運用 Tensor 之前,當然要學會創建一個 Tensor 來使用,所以一開始我們先來看看怎麼創建一個 Tensor
創建空的 tensor torch.empty()
x = torch.empty(2)
print(x)
# tensor([5.2430e+33, 5.4511e-43])
x = torch.empty(2, 3)
print(x)
# tensor([[0., 0., 0.],
# [0., 0., 0.]])
創建 0 tensor torch.zeros()
x = torch.zeros(2, 3)
print(x)
# tensor([[0., 0., 0.],
# [0., 0., 0.]])
創建 random tensor torch.rand()
x = torch.rand(2, 3)
print(x)
# tensor([[0.6430, 0.0116, 0.1679],
# [0.8597, 0.1615, 0.4508]])
empty
跟 zeros
的差別在 zeros
是創建零元素,empty
則是單純宣告記憶體區塊,並沒有初始化參數,因此裡面的參數可以是任何值
創建 1 tensor torch.ones()
x = torch.ones(2, 3)
print(x)
# tensor([[1., 1., 1.],
# [1., 1., 1.]])
資料型態 torch.dtype
x = torch.ones(2, 3)
print(x.dtype)
# torch.float32
torch.float32
x = torch.ones(2, 3, dtype=torch.int)
print(x.dtype)
# torch.int
資料大小 torch.size()
x = torch.ones(2, 3)
print(x.size())
# torch.Size([2, 3])
也可以直接賦值
x = torch.tensor([2, 3])
print(x)
# tensor([2, 3])
print(x.size())
# torch.Size([2])
+
-
*
/
ans = x1 + x2
ans = torch.add(x1, x2)
x1
加到 x2
中
x2.add_(x1)
ans = x1 - x2
ans = torch.sub(x1, x2)
ans = x1 * x2
ans = torch.mul(x1, x2)
ans = x1 / x2
ans = torch.div(x1, x2)
array
或是 list
的時候往往也會選取部分資料,那如何取得 Tensor 之中的 items 呢?下面我們會基於
x = torch.rand(5, 3)
print(x)
# tensor([[0.8033, 0.7967, 0.0952],
# [0.0960, 0.2553, 0.9135],
# [0.5835, 0.1997, 0.4466],
# [0.7153, 0.9609, 0.7458],
# [0.1914, 0.5431, 0.2532]])
來介紹各種資料的取法,那由於中文的那個 row column 的行列問題,我們這邊就直接用英文表示print(x[0, :])
# tensor([0.8033, 0.7967, 0.0952])
print(x[:, 0])
# tensor([0.8033, 0.0960, 0.5835, 0.7153, 0.1914])
print(x[0, 0])
# tensor(0.8033)
print(x[0, 0].item())
# 0.8032872080802917
y = x.view(15)
print(y)
# tensor([0.8033, 0.7967, 0.0952, 0.0960, 0.2553, 0.9135, 0.5835, 0.1997, 0.4466,
# 0.7153, 0.9609, 0.7458, 0.1914, 0.5431, 0.2532])
y = x.view(-1, 5)
print(y.size())
# torch.Size([3, 5])
a = torch.ones(5)
print(a)
b = a.numpy()
print(b)
# tensor([1., 1., 1., 1., 1.])
# [1. 1. 1. 1. 1.]
a = np.ones(5)
print(a)
b = torch.from_numpy(a)
print(b)
# [1. 1. 1. 1. 1.]
# tensor([1., 1., 1., 1., 1.], dtype=torch.float64)
a
跟 Numpy b
會共享同一個 memory address ,所以操作會被同步,要特別注意==
a.add_(1)
print(a)
print(b)
# tensor([2., 2., 2., 2., 2.])
# [2. 2. 2. 2. 2.]
a += 1
print(a)
print(b)
# [2. 2. 2. 2. 2.]
# tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
torch.cuda.is_available()
來檢查是否可以使用 GPU cuda
if torch.cuda.is_available():
device = torch.device("cuda")
x = torch.ones(5, device=device)
y = torch.ones(5)
y = y.to(device)
z = x + y
print(z)
z = z.to("cpu")
z = z.numpy()