pytorch基本操作

Referred to https://www.bilibili.com/video/BV17X4y1H7dK/?spm_id_from=333.337.search-card.all.click&vd_source=d312c66700fc64b66258a994f0a117ad

import torch
import numpy as np
torch.cuda.is_available()

True

1 Basic Operation

1.1 create tensor

# from list
torch.tensor([1,2]),torch.tensor([[1,2],[3,4]]),torch.tensor([1,2],dtype=float)

(tensor([1, 2]),
tensor([[1, 2],
[3, 4]]),
tensor([1., 2.], dtype=torch.float64))

# from numpy
torch.from_numpy(np.array([1,2])),torch.from_numpy(np.array([1.0,2.0]))

(tensor([1, 2], dtype=torch.int32), tensor([1., 2.], dtype=torch.float64))

print(torch.ones(2,3))
print(torch.zeros(2, 3))
print(torch.eye(3))
print(torch.full((2, 3), 3.14))

tensor([[1., 1., 1.],
[1., 1., 1.]])
tensor([[0., 0., 0.],
[0., 0., 0.]])
tensor([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
tensor([[3.1400, 3.1400, 3.1400],
[3.1400, 3.1400, 3.1400]])

print(torch.empty(2, 3))
print(torch.rand(2, 3))
print(torch.randn(2, 3))
print(torch.randint(1, 100, (2, 3)))

tensor([[3.1400, 3.1400, 3.1400],
[3.1400, 3.1400, 3.1400]])
tensor([[0.6569, 0.8155, 0.0479],
[0.6782, 0.2530, 0.6569]])
tensor([[-1.2733, 0.2047, 0.5430],
[-0.2978, -1.0526, 0.6567]])
tensor([[80, 59, 75],
[95, 48, 94]])

print(torch.arange(0, 10, 2))
print(torch.arange(0, 10, 2).dtype)
print(torch.arange(0.0, 10.0, 2).dtype)

print(torch.linspace(0, 10, 3))
print(torch.linspace(0, 10, 3).dtype)

tensor([0, 2, 4, 6, 8])
torch.int64
torch.float32
tensor([ 0., 5., 10.])
torch.float32

print(torch.arange(0, 10, 2).to(torch.float64).dtype)

torch.float64

1.2 tensor index

# Create test data a
# 4 images, 3 channels, 28*28 pixels
a = torch.zeros(4,3,28,28)
a.size(),a.shape

(torch.Size([4, 3, 28, 28]), torch.Size([4, 3, 28, 28]))

# View 0th picture
print(a[0].shape)

# View the 0th image,the 0th channel
print(a[0, 0].shape)

# View the 0th image,the 0th channel,the 2nd row
print(a[0, 0, 2].shape)

# View the 0th image,the 0th channel,the 2nd row and 4th column 
print(a[0, 0, 2, 4].shape)

torch.Size([3, 28, 28])
torch.Size([28, 28])
torch.Size([28])
torch.Size([])

#Slice 
#View 0-1 images 
print(a[:2].shape) 
#View 0-1 channels of 0-1 images 
print(a[:2, :2].shape) 
#View the inverse 5-positive 24 rows of all channels of 0-1 images 
print(a[:2, :, -5:25].shape) 
#Interval indexed 
print(a[:, :, :, ::2].shape)
print(a[:, :, ::6, ::2].shape)

torch.Size([2, 3, 28, 28])
torch.Size([2, 2, 28, 28])
torch.Size([2, 3, 2, 28])
torch.Size([4, 3, 28, 14])
torch.Size([4, 3, 5, 14])

# Use ... to indicate multiple omitted

#Fetch columns 0-2 of all images 
print(a[... , :2].shape) 
#fetch rows 0-2 of all images 
print(a[... , :2, :].shape) 
# take the 2nd image 
print(a[2, ...] .shape)

torch.Size([4, 3, 28, 2])
torch.Size([4, 3, 2, 28])
torch.Size([3, 28, 28])

1.3 Dimensional transformations

a = torch.randn(4,1,28,28)
print(a.shape)

torch.Size([4, 1, 28, 28])

# view == reshape 
print(a.reshape(4,1*28*28).shape)
print(a.reshape(4,784).reshape(4, 1, 28, 28).shape)

torch.Size([4, 784])
torch.Size([4, 1, 28, 28])

print(a.unsqueeze(0).shape)
print(a.unsqueeze(-1).shape)

torch.Size([1, 4, 1, 28, 28])
torch.Size([4, 1, 28, 28, 1])

print(a.squeeze(0).shape)
print(a.squeeze(1).shape)

torch.Size([4, 1, 28, 28])
torch.Size([4, 28, 28])

print(a.unsqueeze(-1).squeeze().shape)

torch.Size([4, 28, 28])

# repeat
print(torch.randn(11,2,1).repeat(3, 3, 3).shape)

torch.Size([33, 6, 3])

# Dimensional exchange
b = torch.randn(3,4)
print(b.t().shape)

c = b.unsqueeze(-1).repeat(1,1,5)
print(c.shape)
print(c.transpose(0,1).shape)
print(c.transpose(-1,-2).shape)
print(c.permute(2,1,0).shape)

torch.Size([4, 3])
torch.Size([3, 4, 5])
torch.Size([4, 3, 5])
torch.Size([3, 5, 4])
torch.Size([5, 4, 3])

1.4 broadcast

#broadcast

a = torch.zeros(2, 3)
b = torch.ones(1, 3)
b[0][1] = 0
c = torch.randn(1)

print(a)
print(b)
print(a+b)


print((a + b).shape)
print((a + c).shape)


print(b.expand_as(a).shape)
print(c.expand_as(a).shape)

tensor([[0., 0., 0.],
[0., 0., 0.]])
tensor([[1., 0., 1.]])
tensor([[1., 0., 1.],
[1., 0., 1.]])
torch.Size([2, 3])
torch.Size([2, 3])
torch.Size([2, 3])
torch.Size([2, 3])

1.5 Splice and Split

a = torch.rand(4,2,3)
b = torch.rand(1,2,3)

torch.cat((a,b),dim=0).shape

torch.Size([5, 2, 3])

a = torch.rand(4,2,3)
b = torch.rand(4,2,3)
torch.stack((a, b), dim=0).shape

torch.Size([2, 4, 2, 3])

a = torch.rand(12, 32, 8)

_1, _2, _3,_4 = a.split(3, dim=0)
print(_1.shape)
print(_2.shape)

_1, _2, _3 = a.split([4, 2, 6], dim=0)
print(_1.shape)
print(_2.shape)
print(_3.shape)

torch.Size([3, 32, 8])
torch.Size([3, 32, 8])
torch.Size([4, 32, 8])
torch.Size([2, 32, 8])
torch.Size([6, 32, 8])

1.6 math

a = torch.FloatTensor([[0, 1, 2], [3, 4, 5]])
b = torch.FloatTensor([[0, 1, 2], [3, 4, 5],[6, 7, 8]])
a, b

(tensor([[0., 1., 2.],
[3., 4., 5.]]),
tensor([[0., 1., 2.],
[3., 4., 5.],
[6., 7., 8.]]))

print(a @ b)
print(a.matmul(b))

tensor([[15., 18., 21.],
[42., 54., 66.]])
tensor([[15., 18., 21.],
[42., 54., 66.]])

a = torch.FloatTensor([[0, 1, 2], [3, 4, 5]])
b = torch.FloatTensor([0, 1, 2])
print(a + b)
print(a - b)
print(a * b)
print(a / b)

tensor([[0., 2., 4.],
[3., 5., 7.]])
tensor([[0., 0., 0.],
[3., 3., 3.]])
tensor([[ 0., 1., 4.],
[ 0., 4., 10.]])
tensor([[ nan, 1.0000, 1.0000],
[ inf, 4.0000, 2.5000]])

print(a**2)

print(a**0.5)

print(a.exp())

print(a.log())

print(a.log2())

tensor([[ 0., 1., 4.],
[ 9., 16., 25.]])
tensor([[0.0000, 1.0000, 1.4142],
[1.7321, 2.0000, 2.2361]])
tensor([[ 1.0000, 2.7183, 7.3891],
[ 20.0855, 54.5981, 148.4132]])
tensor([[ -inf, 0.0000, 0.6931],
[1.0986, 1.3863, 1.6094]])
tensor([[ -inf, 0.0000, 1.0000],
[1.5850, 2.0000, 2.3219]])

# limit the upper and lower limits 
a.clamp(2, 4)

tensor([[2., 2., 2.],
[3., 4., 4.]])

print(a > b)

print(a < b)

print(a == b)

print(a != b)

tensor([[False, False, False],
[ True, True, True]])
tensor([[False, False, False],
[False, False, False]])
tensor([[ True, True, True],
[False, False, False]])
tensor([[False, False, False],
[ True, True, True]])

c = torch.FloatTensor([3.14])

print(c.floor())

print(c.ceil())

print(c.round())

tensor([3.])
tensor([4.])
tensor([3.])

1.7 statistics

a = torch.FloatTensor([[0., 1., 2.], [3., 4., 5.]])
a

tensor([[0., 1., 2.],
[3., 4., 5.]])

print(a.min())

print(a.max())

print(a.mean())

#product
print(a.prod())

print(a.sum())

print(a.argmax())

print(a.argmin())

tensor(0.)
tensor(5.)
tensor(2.5000)
tensor(0.)
tensor(15.)
tensor(5)
tensor(0)

b =  torch.FloatTensor([[0., 1., 2.], [3., 4., 5.], [6., 7., 8.]])
b.max(dim=0),b.max(dim=1)

(torch.return_types.max(
values=tensor([6., 7., 8.]),
indices=tensor([2, 2, 2])),
torch.return_types.max(
values=tensor([2., 5., 8.]),
indices=tensor([2, 2, 2])))

b.argmax(dim=0),b.argmax(dim=1)

(tensor([2, 2, 2]), tensor([2, 2, 2]))

img

print(b.norm(1))
print(b.norm(1, dim=0))

print(b.norm(2))
print(b.norm(2, dim=0))

tensor(36.)
tensor([ 9., 12., 15.])
tensor(14.2829)
tensor([6.7082, 8.1240, 9.6437])

b.topk(2, dim=1, largest=False)

torch.return_types.topk(
values=tensor([[0., 1.],
[3., 4.],
[6., 7.]]),
indices=tensor([[0, 1],
[0, 1],
[0, 1]]))

b.kthvalue(3, dim=1)

torch.return_types.kthvalue(
values=tensor([2., 5., 8.]),
indices=tensor([2, 2, 2]))

posted on 2024-05-28 22:10  LittleHenry  阅读(57)  评论(0)    收藏  举报