跟李沐学AI

 

是的,我又开深度学习的新坑了

数据操作+数据预处理

N维数组样例

N维数组是机器学习和神经网络的主要数据结构 20250704204843 20250704204922

创建数组

  • 创建数组需要
    • 形状:例如3x4矩阵
    • 每个元素的数据类型
    • 每个元素的值

访问数组

20250704205234 勘误:一列应为[:,1]

数据操作实现

张量表示一个数值组成的数组,这个数组可能有多个维度

In: x = torch.arange(4)
Out: tensor([0,1,2,3])

可以通过张量的shape属性来访问张量的形状和张量中元素的总数

In: x.shape
Out:torch.Size([4])
In:x.numel()
Out:4 #输出的是有多少数据,必为标量

要改变一个张量的形状而不改变元素数量和元素值,我们可以调用reshape函数

In:X=x.reshape(2,2)
   X
Out:tensor([[0,1],
            [2,3]])

使用全0、全1、其他常量或者从特定分布中随机采样的数字

In:torch.zeros((2,3,4))
Out: #一个全为0的形状为2,3,4的张量
全一torch.ones((2,3,4))

通过提供包含数值的Python列表(或嵌套列表)来为所需张量中的每个元素赋予确定值

In:torch.tensor([[1,2],[2,3],[8,7]])
Out:tensor([[1,2],
            [2,3],
            [8,7]])

常见的标准算术运算符(+、-、*、/和)都可以被升级为按元素运算(即元素之间依次一对一计算)(运算符为求幂运算),也可按元素进行指数运算

In:x = torch.tensor([1.0,2,4,8])
   y = torch.tensor([2,2,2,2])
   x+y
Out:tensor([3.,4.,6.,10.])
In:torch.exp(x)
Out:tensor([2.7183e+00])

也可以把多个张量连结到一起(dim=0为按行拼接,dim=1为按列拼接)(dim=0表示最外层的[]括号,=1表示往里一层) 20250704212928

可通过逻辑运算符构建二元张量

In:X==Y
Out:tensor([[False,True,False,True],
            [False,False,False,False],
            [False,False,False,False]])

对张量中的所有元素进行求和会产生一个只有一个元素的张量

In:X.sum()
Out:tensor(15.)

即使形状不同,仍然可以通过广播机制来执行按元素操作
广播机制触发需要两个条件:1.两个张量不为空;2.两个张量从右向左一次比较,要么相同,要么其中一个为1,要么其中一个为空

20250704215940