【深度学习(李沐)】


1 数据操作和数据预处理


1.1 数组维度理解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


1.2 数据操作实现

1.2.1 张量(tensor)

n维数组,也称为张量(tensor)。无论使用哪个深度学习框架,它的张量类(在MXNet中为ndarray, 在PyTorch和TensorFlow中为Tensor)都与Numpy的ndarray类似。

1.2.2 torch.arange

我们可以使用 arange 创建一个行向量 x。这个行向量包含以0开始的前12个整数,它们默认创建为整数。
在这里插入图片描述

1.2.3 shape

可以通过张量的shape属性来访问张量(沿每个轴的长度)的形状
在这里插入图片描述

1.2.4 numel

返回张量中元素的总数,即形状的所有元素乘积标量)。
在这里插入图片描述

1.2.5 reshape

要想改变一个张量的形状而不改变元素数量和元素值,可以调用reshape函数。
例如:这里x是维度为12的向量,把它变为3行4列的张量。
在这里插入图片描述
如果我们的目标形状是(高度,宽度), 那么在知道宽度后,高度会被自动计算得出,不必我们自己做除法。 在上面的例子中,为了获得一个3行的矩阵,我们手动指定了它有3行和4列。 幸运的是,我们可以通过-1来调用此自动计算出维度的功能。 即我们可以用x.reshape(-1,4)x.reshape(3,-1)来取代x.reshape(3,4)

1.2.6 zeros和ones:

创建一个形状为(2,3,4)的张量,其中所有元素都设置为0。
在这里插入图片描述
创建一个形状为(2,3,4)的张量,其中所有元素都设置为1。
在这里插入图片描述

1.2.7 randn:

创建一个形状为(3,4)的张量,每个元素都从均值为0、标准差为1的标准高斯分布(正态分布)中随机采样
在这里插入图片描述

1.2.8 列表嵌套列表:

我们还可以通过提供包含数值的Python列表(或嵌套列表),来为所需张量中的每个元素赋予确定值。([ ]方括号表示列表)
在这里,最外层的列表对应于轴0,内层的列表对应于轴1。
在这里插入图片描述


1.3 运算符

1.3.1 按元素(elementwise)运算

将标准标量运算符应用于数组的每个元素。对于将两个数组作为输入的函数,按元素运算将二元运算符应用于两个数组中的每对位置对应的元素
(1)[常见的标准算术运算符(+-*/**)都可以被升级为按元素运算]。我们可以在同一形状的任意两个张量上调用按元素操作。
在这里插入图片描述
(2)指数运算
在这里插入图片描述

1.3.2 张量连结

[我们也可以把多个张量连结(concatenate)在一起],
我们只需要提供张量列表,并给出沿哪个轴连结。
下面的例子分别演示了当我们沿行(轴0,形状的第一个元素)和按列(轴1,形状的第二个元素)连结两个矩阵时,会发生什么情况。
我们可以看到,第一个输出张量的轴0长度( 6 6 6)是两个输入张量轴-0长度的总和( 3 + 3 3 + 3 3+3);
第二个输出张量的轴1长度( 8 8 8)是两个输入张量轴-1长度的总和( 4 + 4 4 + 4 4+4)。
在这里插入图片描述

1.3.3 逻辑运算形成张量

X == Y为例:
对于每个位置,如果逻辑语句X == Y在该位置处为真,则新张量中相应项的值为1,否则该位置为0。
在这里插入图片描述


1.4 广播

广播:首先,通过适当复制元素来扩展一个或两个数组, 以便在转换之后,两个张量具有相同的形状。 其次,对生成的数组执行按元素操作
在这里插入图片描述
于a和b分别是3x1和1x2矩阵,如果让它们相加,它们的形状不匹配。
矩阵a将复制列, 矩阵b将复制行,然后再按元素相加。
在这里插入图片描述


1.5 索引和切片

[可以用[-1]选择最后一个元素,可以用[1:3]选择第二个和第三个元素]
[1:3]也就是选择[1,3)内的数,也就是1和2。
在这里插入图片描述
[指定索引来将元素写入矩阵。]
在这里插入图片描述
如果我们想[为多个元素赋值相同的值,我们只需要索引所有元素,然后为它们赋值。]
例如,[0:2, :]访问第1行和第2行,其中“:”代表沿轴1(列)的所有元素。
在这里插入图片描述


1.6 节省内存

[运行一些操作可能会导致为新结果分配内存]。
例如,如果我们用Y = X + Y,我们将取消引用Y指向的张量,而是指向新分配的内存处的张量。

在下面的例子中,我们用Python的id()函数演示了这一点,
它给我们提供了内存中引用对象的确切地址。
运行Y = Y + X后,我们会发现id(Y)指向另一个位置。
这是因为Python首先计算Y + X,为结果分配新的内存,然后使Y指向内存中的这个新位置。
在这里插入图片描述
我们可以使用切片表示法将操作的结果分配给先前分配的数组,例如Y[:] = <expression>
在这里插入图片描述
[如果在后续计算中没有重复使用X
我们也可以使用X[:] = X + YX += Y来减少操作的内存开销。
]
在这里插入图片描述


1.7 转换为其他python对象

numpy数组转换为torch张量
将共享它们的底层内存,就地操作更改一个张量也会同时更改另一个张量。
在这里插入图片描述
其他
要(将大小为1的张量转换为Python标量),我们可以调用item函数或Python的内置函数。
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值