《动手学深度学习》第二章——预备知识_2.1数据操作_学习思考与习题答案


2.1数据操作

一、重点内容总结

1.变量的析构

这个概念是我之前比较模糊的,李沐老师在这里提到了,记录一下:
用一个例子来看

Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
X = torch.arange(12, dtype=torch.float32).reshape((3,4))
before = id(Y)
Y = Y + X
id(Y) == before

输出结果:

False

这个例子说明在运行一些操作的时候,可能会导致为新结构分配内存。

Y的地址记录在before变量中,然后进行了将Y + X赋值给了一个新的变量Y的操作,虽然表面上还是Y,但是此Y已经非彼Y了!Y的地址发生了变化。

2.执行原地操作

延续上面的例子 ,我们可以这样操作执行原地操作:

Z = torch.zeros_like(Y)
print('id(Z):', id(Z))
Z[:] = X + Y
print('id(Z):', id(Z))

输出结果:

id(Z): 140040758378960
id(Z): 140040758378960

构造一个和Y同维度的Z,Z的所有元素都为0,之后进行Z[:] = X + Y操作,相当于对Z的元素的一个改写,地址不发生变化,实现原地操作。

二、习题答案

1.运行本节中的代码。将本节中的条件语句X == Y更改为X < Y或X > Y,然后看看你可以得到什么样的张量。

X = torch.arange(12, dtype=torch.float32).reshape((3,4))
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
X, Y

输出结果:

(tensor([[ 0.,  1.,  2.,  3.],
         [ 4.,  5.,  6.,  7.],
         [ 8.,  9., 10., 11.]]), tensor([[2., 1., 4., 3.],
         [1., 2., 3., 4.],
         [4., 3., 2., 1.]]))
X > Y

输出结果:

tensor([[False, False, False, False],
        [ True,  True,  True,  True],
        [ True,  True,  True,  True]])

2.用其他形状(例如三维张量)替换广播机制中按元素操作的两个张量。结果是否与预期相同?

A = torch.tensor([[[1, 2, 3], [4, 5, 6]]])
B = torch.tensor([[[10, 20, 30]], [[40, 50, 60]]])
C = A + B
A.shape,B.shape, C, C.shape

输出结果:

(torch.Size([1, 2, 3]), torch.Size([2, 1, 3]), tensor([[[11, 22, 33],
          [14, 25, 36]],
 
         [[41, 52, 63],
          [44, 55, 66]]]), torch.Size([2, 2, 3]))
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值