是的,我又开深度学习的新坑了
数据操作+数据预处理
N维数组样例
N维数组是机器学习和神经网络的主要数据结构
创建数组
- 创建数组需要
- 形状:例如3x4矩阵
- 每个元素的数据类型
- 每个元素的值
访问数组
勘误:一列应为[:,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表示往里一层)
可通过逻辑运算符构建二元张量
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,要么其中一个为空