动手学深度学习读书笔记:pytorch深度学习预备知识

pytorch深度学习预备知识

虽然它被称为PyTorch,但是代码中使⽤torch⽽不是pytorch
张量(tensor)表⽰⼀个由数值组成的数组,这个数组可能有多个维度
张量的阶数有时也称维度,或者轴axis
多维的理解:
在这里插入图片描述

  1. 读取数据和写⼊数据

x = torch.arange(12) //生成0-12 不包含12
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

X = x.reshape(3, 4)  //重新构造x
tensor([[ 0, 1, 2, 3],
		[ 4, 5, 6, 7],
		[ 8, 9, 10, 11]])
//我们可以通过-1来调⽤此⾃动计算出维度的功能x.reshape(-1, 4),
  1. Tensor运算符

x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
x + y, x - y, x * y, x / y, x ** y # **运算符是求幂运算

重要:也可以把多个张量连结(concatenate)在⼀起,把它们端对端地叠起来形成⼀个更⼤的张量。我们只需要提供张量列表,并给出沿哪个轴连结。

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]])
torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1)

(tensor([[ 0., 1., 2., 3.],
		[ 4., 5., 6., 7.],
		[ 8., 9., 10., 11.],
		[ 2., 1., 4., 3.], //此处开始连接 dim = 0
		[ 1., 2., 3., 4.],
		[ 4., 3., 2., 1.]]),
tensor([[ 0., 1., 2., 3., 2., 1., 4., 3.],
		[ 4., 5., 6., 7., 1., 2., 3., 4.],
		[ 8., 9., 10., 11., 4., 3., 2., 1.]]))
		
//dim = 0,列不变,dim = 1,行不变
  1. 广播机制(重要)

在某些情况下,即使形状不同,
我们仍然可以通过调⽤ ⼴播机制(broadcasting mechanism)来执⾏按元素操作。

(tensor([[0],
		[1],
		[2]]),
tensor([[0, 1]]))
//将两个矩阵⼴播为⼀个更⼤的3 × 2矩阵,矩阵a将复制列,矩阵b将复制⾏
(tensor([[0, 0]
		[1, 1]
		[2, 2]]),
tensor([[0, 1],
		[0, 1],
		[0, 1]]))
//相加后
tensor([[0, 1],
		[1, 2],
		[2, 3]])
  1. 索引和切片(重要)

与任何Python数组⼀样:第⼀个元素的索引是0,最后⼀个元素索引是-1;

X = torch.arange(12, dtype=torch.float32).reshape((3,4))
//如下所⽰,我们可以⽤[-1]选择最后⼀个元素,可以⽤[1:3]选择第⼆个和第三个元素:
X[-1], X[1:3]

tensor([ 8., 9., 10., 11.]),
tensor([[ 4., 5., 6., 7.],
		[ 8., 9., 10., 11.]])

//除读取外,我们还可以通过指定索引来将元素写⼊矩阵
X[1, 2] = 9 //改变12列元素为91,2)以(00)开始

python中x[:],x[:-1],x[:,]x[:,-1]等操作含义解析
一维数组:
在这里插入图片描述
在一个二维的tensor中我们举一反三,[0:2, :]访问
第1⾏和第2⾏,其中“:”代表沿轴1(列)的所有元素。

X[0:2, :] = 12 //其中02还是第一行和第二行 ,后的:表示的所有列

tensor([[12., 12., 12., 12.],
		[12., 12., 12., 12.],
		[ 8., 9., 10., 11.]])
  1. 不适当的运算导致内存开销大

⽤Y = X + Y,会导致指向新分配的内存处的张量

before = id(Y)
Y = Y + X
id(Y) == before
False //赋值后的Y不在原来的内存了。。。。

before = id(X)
X += Y
id(X) == before
True //使⽤X[:] = X + Y或X += Y来减少操作的内存开销
  1. torch和numpy(重要)

最大的区别就是Numpy会把ndarray放在CPU中进行加速运算,而由Torch产生的Tensor会放在GPU中进行加速运算。

X = torch.arange(12, dtype=torch.float32).reshape((3,4))
A = X.numpy()
B = torch.tensor(A)
type(A), type(B)
(numpy.ndarray, torch.Tensor)

感谢:
[1]python中x[:],x[:-1],x[:,]x[:,-1]等操作含义解析https://blog.csdn.net/qq_34621022/article/details/103558098
[2]深度学习numpy与tensor基础知识、关系与区别,通过pytorch构建网络加载数据
https://blog.csdn.net/wty98wzq/article/details/112717379

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编号09527

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值