欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

II.Pytorch 基本语法

最编程 2024-10-01 06:58:13
...

2.1 Pytorch的基本元素操作

# 创建一个没有初始化的矩阵
x = torch.empty(5,3)
print(x)

内存中存在脏数据
在这里插入图片描述

# 创建一个有初始化矩阵
x = torch.rand(5,3)
x

从均匀分布(范围通常是 [0, 1))中生成随机数
在这里插入图片描述

x = torch.randn(5,3)
x

均值为0方差为1的矩阵
在这里插入图片描述

torch.randint(0,10,(3,3))

在这里插入图片描述

# 创建⼀个全零矩阵
torch.zeros(5,3)

在这里插入图片描述

# 直接通过数据创建张量
torch.tensor([2.5,3.5])

在这里插入图片描述

# 在已有张量上创建一个新张量
x = x.new_ones(5,3)
print(x)
y = torch.rand_like(x)
print(y)

在这里插入图片描述

# 张量尺寸
x.size()

在这里插入图片描述

# 将x中的值取出
# 如果张量中只有一个元素可以直接用.item()取出
for i in range(x.size(0)):
    for j in range(x.size(1)):
        print(x[i][j].item())

在这里插入图片描述

2.2 Pytorch的基本运算操作

# 加法操作
y = torch.rand(5,3)
print(x+y)

在这里插入图片描述

torch.add(x,y)

在这里插入图片描述

result = torch.empty(5,3)
torch.add(x,y,out=result)
result

在这里插入图片描述

# 不赋值给y
y.add(x)

在这里插入图片描述

y

在这里插入图片描述

# 赋值给y
y.add_(x)

在这里插入图片描述

y

在这里插入图片描述

# 支持切片操作
y[:,1]

在这里插入图片描述

# 改变张量形状
x = torch.rand(2,6)
y = x.view(12)
z = x.view(3,4)
# -1表示自动匹配个数
p = x.view(6,-1)
print(x.size(),y.size(),z.size(),p.size())

在这里插入图片描述

2.3 Torch Tensor和Numpy array之间的相互转换

a = torch.ones(5)
a

在这里插入图片描述

# 将Torch tensor转换为Numpy array
b = a.numpy()
b

在这里插入图片描述

# tensor 和 array 共享底层内存空间,一个改变另一个也会改变
a.add_(1)
a,b

在这里插入图片描述

a = np.ones(5)
# # 将Numpy array转换为Torch tensor
b = torch.from_numpy(a)
np.add(a,1,out=a)
a,b

在这里插入图片描述

2.4 Pytorch中的autograd

# requires_grad=True计算梯度
x = torch.ones(2,2,requires_grad=True)
x

在这里插入图片描述

# 自动继承requires_grad=True这个属性
y = x + 2
y

在这里插入图片描述

# grad_fn记录了张量是如何通过各种操作生成的。
# None因为x是手动创建的,AddBackward0表示y是通过加法操作创建的
x.grad_fn,y.grad_fn

在这里插入图片描述

z = y * y * 3
out = z.mean()
z,out

在这里插入图片描述

a = torch.rand(2,2)
a = (a * a) / (a - 1)
print(a.requires_grad)

在这里插入图片描述

a.requires_grad_(True)
print(a.requires_grad)

在这里插入图片描述

b = (a * a).sum()
b.grad_fn

在这里插入图片描述

# 关于梯度Gradients
x = torch.tensor([[1.0, 2.0], [3.0, 4.0]], requires_grad=True)
y = x * x
out = y.sum()

# 反向传播
out.backward()

print("x.grad:", x.grad)

在这里插入图片描述

x = torch.rand(2,2,requires_grad=True)
x

在这里插入图片描述

# 获得一个新的Tensor,跟x拥有相同的内容但不需要自动求导
y = x.detach()
y.requires_grad

在这里插入图片描述

# 查看x和y元素是否相同
x.eq(y)

在这里插入图片描述

x.eq(y).all()

在这里插入图片描述