Pytorch笔记📓第一弹 Luxynth's Website | Pytorch笔记📓第一弹

Pytorch笔记📓第一弹

Pytorch的核心——张量

在深度学习中,所有的数据和模型参数都用张量表示。

张量(Tensor)可以看成是:

  • 0 维:标量(scalar),比如 3
  • 1 维:向量(vector),比如 [1, 2, 3]
  • 2 维:矩阵(matrix)
  • 3 维及以上:高维数组,比如一批图片 (batch_size, height, width, channels)

📌 在 PyTorch 里:

  • torch.tensor() 创建张量
  • .shape 查看维度
  • .dtype 数据类型
  • .to(device) 把张量放到 CPU/GPU

GPU加速

如果有GPU,PyTorch 会自动帮你用 CUDA 加速


device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
x = torch.randn(3, 4).to(device)

自动求导

PyTorch 可以自动计算梯度,这就是深度学习训练的基础。

  • 创建张量时加 requires_grad=True,PyTorch 会记录计算图。
  • 调用 .backward() 自动反向传播,计算梯度。
  • 梯度存放在 .grad 里。

第一个Pytorch文件

#myfirstPytorch
import torch
print(torch.__version__)
  
x=torch.tensor([[1,2],[3,4]],dtype=torch.float32)
y=torch.ones((2,2))

print("x:\n",x)
print("y:\n",y)

z=x+y
print("z:\n",z)

device=torch.device("cuda" if torch.cuda.is_available() else "cpu")
x=x.to(device)
y=y.to(device)
x=x.to(device)
print("设备:",device)
  
a=torch.randn(3,4,requires_grad=True)
b=torch.randn(3,4)
c=a*b
out=c.sum()
out.backward()
print("a的梯度:\n",a.grad)

#运行结果
2.6.0
x:
 tensor([[1., 2.],
        [3., 4.]])
y:
 tensor([[1., 1.],
        [1., 1.]])
x:
 tensor([[2., 3.],
        [4., 5.]])
设备: cpu
a的梯度:
 tensor([[ 0.4779,  1.5350,  0.0037,  1.2580],
        [-0.5812,  1.6379,  0.7242,  1.2655],
        [-0.6917, -0.8033, -1.8678, -1.1883]])

进阶任务 🖊️

  • 创建一个 (2, 3, 4) 的随机张量 t(float 类型)
  • 对它做:
    • 加法(+ 1)
    • 减法(- 0.5)
    • 矩阵乘法(用 .matmul() 或 @)*
  • 把它移到 GPU(如果没有 GPU 就依然用 CPU),并打印:
    • .shape
    • .dtype

import torch

t=torch.randn(2,3,4,dtype=torch.float32)
x=torch.ones((2,3,4))

print("t:\n",t)
a=t+x
b=t-x*0.5
  
device=torch.device("cuda" if torch.cuda.is_available() else "cpu")
# t=t.to(device)
# x=x.to(device)
# a=a.to(device)
# b=b.to(device)
t, x, a, b=[tensor.to(device) for tensor in [t, x, a, b]]
print("设备:\n",device)

print("a:\n",a)
print("b:\n",b)
  
print(".shape:\n",t.shape)
print(".dtype:\n",t.dtype)

#运行结果
t:
 tensor([[[-0.5283,  1.2119,  1.6814,  0.6434],
         [-0.3742, -0.8421, -1.6161,  0.2300],
         [-1.2224,  0.4019, -1.4070,  0.4027]],

        [[ 0.0407, -0.5536, -0.7496,  1.7721],
         [ 1.4842,  0.2181, -0.0732, -1.1741],
         [ 0.4077, -0.7331, -2.2628,  0.8560]]])
设备:
 cpu
a:
 tensor([[[ 0.4717,  2.2119,  2.6814,  1.6434],
         [ 0.6258,  0.1579, -0.6161,  1.2300],
         [-0.2224,  1.4019, -0.4070,  1.4027]],

        [[ 1.0407,  0.4464,  0.2504,  2.7721],
         [ 2.4842,  1.2181,  0.9268, -0.1741],
         [ 1.4077,  0.2669, -1.2628,  1.8560]]])
b:
 tensor([[[-1.0283,  0.7119,  1.1814,  0.1434],
         [-0.8742, -1.3421, -2.1161, -0.2700],
         [-1.7224, -0.0981, -1.9070, -0.0973]],

        [[-0.4593, -1.0536, -1.2496,  1.2721],
         [ 0.9842, -0.2819, -0.5732, -1.6741],
         [-0.0923, -1.2331, -2.7628,  0.3560]]])
.shape:
 torch.Size([2, 3, 4])
.dtype:
 torch.float32
 

矩阵乘法的实现 ——用 .matmul() 或 @

因为张量t相当于2个3* 4的矩阵,不能直接和自己相乘,所以需要再随机生成一个(2,4,k)的矩阵//令k=6


import torch

t=torch.randn(2,3,4,dtype=torch.float32)
s=torch.randn(2,4,6,dtype=torch.float32)
  
device=torch.device("cuda" if torch.cuda.is_available() else "cpu")
t,s=[tensor.to(device) for tensor in [t,s]]
print("设备:\n",device)
  
out=torch.matmul(t,s)
#或者out=t@s
print("out:\n",out)
print(".shape:\n",out.shape)
print(".dtype:\n",out.dtype)

#运行结果
设备:
 cpu
out:
 tensor([[[-0.6649, -0.7129,  1.1296, -1.8482,  1.4739,  0.7178],
         [-1.5440,  4.1733, -3.7995, -1.6282, -3.5405, -0.3269],
         [ 2.4297, -4.6300,  0.9426,  2.7147,  1.8590,  4.4622]],

        [[ 1.0501,  0.4767,  1.8069, -3.8165,  2.4047, -1.2312],
         [-1.2006,  0.1548, -0.6207,  1.4950, -1.4686,  1.2318],
         [-1.5264,  0.0297, -0.2412, -1.4789,  1.6743, -1.2765]]])
.shape:
 torch.Size([2, 3, 6])
.dtype:
 torch.float32
 
说点什么…

公告图标
×

公告栏🪧

📌亲爱的读者,这里是Luxynth的小破站🌻~



📌很高兴,我们在这片广袤的网络世界相遇。请随意漫步,这里的一切都献给你🎀

📌文章持续更新中,欢迎你经常来访~