新坑- 深度学习笔记 1

1.为什么使用张量(Tensor)?
1)GPU很好地支持加速计算,而Numpy仅支持CPU计算;
2) 张量类支持自动微分。

2.一些简单的张量操作

import torch
x = torch.arange(12)
print(x)
print(x.shape)  # 访问张量的形状
print(x.numel())  # 张量中元素的总数
print(x.reshape(3, 4))
print(torch.zeros(2, 3, 4))
print(torch.ones(2, 3, 4))
print(torch.randn(3, 4))  # 每个元素都从均值为0,标准差为1的正态分布中随机采样
print(torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]]))

执行窗口:
在这里插入图片描述
3.按元素运算:多个张量之间的数学运算是按元素运算

x = torch.tensor([1, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])

print(x+y)
print(x-y)
print(x*y)
print(x/y)
print(x**y)
print(torch.exp(x))

执行窗口:
在这里插入图片描述
4.张量连接
shape的第一个元素:shape[0]指张量的行数,shape的第二个元素:shape[1]指张量的列数。
所以torch.cat((X,Y), dim=0)是在扩行,torch.cat((X,Y), dim=1)是在扩列。
torch.cat()的使用要求是,必须在连接维度以外的维度上匹配。

x = torch.tensor([[1, 2, 4, 8], [4, 3, 2, 1]])
y = torch.tensor([[2, 2, 2, 2],[1, 1, 1, 1]])

print(torch.cat((x, y), dim=0))
print(torch.cat((x, y), dim=1))

在这里插入图片描述
如果y=torch.tensor[2, 2, 2, 2],那么程序会默认报错,因为这是一个(4,1)的张量,而x是(2,4),dim=0时,列数应当相同。dim=1时,行数应当相同,都不相同当然会报错。

5.按元素比较,记住就行

x = torch.tensor([[1, 2, 4, 8], [4, 3, 2, 1]])
y = torch.tensor([[2, 2, 2, 2], [1, 1, 1, 1]])

print(x == y)
print(x.sum())

在这里插入图片描述
6.tensor的切片运算

x = torch.tensor([[1, 2, 4, 8], [4, 3, 2, 1]])
print(x[:, 0:1])
print(x[-1])

在这里插入图片描述
7.节省内存
提出问题Y=X+Y,所得到的Y不会保存在原来的内存处,而是指向新分配的内存处的张量。

print(id(y))
y = x+y
print(id(y))

在这里插入图片描述
观察到前后两个内存地址是不同的。

解决方法:用切片表示就行。

y[:] = x+y

8.广播机制
形状不同的张量按元素操作:
1.通过适当复制元素来扩展一个或两个数组,以便在转换之后,两个张量具有相同的形状;
2.对生成的数组按元素操作

x = torch.tensor([[1, 2, 4, 8], [4, 3, 2, 1]])
y = torch.tensor([2, 2, 2, 2])

print(x+y)

9.课后题
1)在比较环节将X==Y修改成X<Y一样可以比较;
2)即使是三维张量,广播机制依旧是有效的。

总结:张量就是数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

rookiexxj01

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

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

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

打赏作者

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

抵扣说明:

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

余额充值