教程:http://pytorch.org/tutorials/
中文教程文档:https://pytorch.apachecn.org/
https://mp.weixin.qq.com/s/7at6y2NcYaxGGN8syxlccA
https://mp.weixin.qq.com/s/Y5hxFXEa27hlAR3PS0E2ng
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《Pytorch 的 Tensor 常用函数与操作》, 一起来围观吧 https://blog.csdn.net/Amanda_python/article/details/112369846?utm_source=app&app_version=4.12.0&code=app_1562916241&uLinkId=usr1mkqgl919blen
dataLoader
8 加载数据集DataLoader官方(len(dataset)/batch_size)
使用GPU
torch.nn神经网络
常用的数学操作
在pytorch官方文档上,Tensor的数学操作方法有90多种,下图给了经常使用的25种数学操作方法(除线性代数运算外,线性运算下面会介绍)
方法 说明
add() Tensor中每个元素同加一个标量,或与另一个Tensor逐元素相加
mul() Tensor中每个元素同乘一个标量,或与另一个Tensor逐元素相乘
div() Tensor中每个元素同除一个标量,或与另一个Tensor逐元素相除
fmod()和remainder() Tensor中每个元素与一个标量的除法余数,相当于Python中的%操作
abs() 对Tensor中的每个元素取绝对值,并返回
ceil() 对Tensor中的每个元素向上取整
floor() 对Tensor中的每个元素向下取整
clamp() 对Tensor中的每个元素取上下限
round() 对Tensor中的每个元素取最近的整数
frac() 返回Tensor中每个元素的分数部分
neg() 对Tensor中的每个元素取负
reciprocal() 对Tensor中的每个元素取倒数
log() 返回一个张量,包含Tensor中每个元素的自然对数
pow() 对Tensor中的每个元素同取一个标量幂值,或采用另外一个Tensor的对应元素
取幂,或对标量采用Tensor的每个元素取幂
exp() 返回一个张量,包含Tensor中每个元素的指数
sigmoid() 返回一个张量,包含Tensor中的每个元素的sigmoid值
sign() 返回一个张量,包含Tensor中每个元素的正负值
sqrt() 返回一个张量,包含Tensor中每个元素的平方根
dist() 返回两个Tensor的范数
mean() 返回Tensor中所有元素的均值
norm() 返回Tensor的范数值
prod() 返回Tensor的所有元素之积
sum() 返回Tensor的 所有元素之和
max() 返回Tensor的所有元素的最大值
min() 返回Tensor的所有元素的最小值
————————————————
版权声明:本文为CSDN博主「江布郎」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_30552495/article/details/113521102
torch.norm()
https://zhuanlan.zhihu.com/p/260162240
索引,切片,连接,换位
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《torch—-pytorch常用函数(持续更新中…….)》, 一起来围观吧 https://blog.csdn.net/qq_24407657/article/details/81835614?utm_source=app&app_version=4.12.0&code=app_1562916241&uLinkId=usr1mkqgl919blen
.torch.cat(inputs,dimension=0)->tensor
torch.squeeze(inout,dim=None,out=None)
torch.squeeze() 对于tensor变量进行维度压缩,去除维数为1的的维度。例如一矩阵维度为A1BC1D,通过squeeze()返回向量的维度为ABCD。squeeze(a),表示将a的维数位1的维度删掉,squeeze(a,N)表示,如果第N维维数为1,则压缩去掉,否则a矩阵不变
torch.unsqueeze()
是squeeze()的反向操作,增加一个维度,该维度维数为1,可以指定添加的维度。例如unsqueeze(a,1)表示在1这个维度进行添加
https://blog.csdn.net/nagato_yuki_sos/article/details/109060587
tensor([0, 1, 2, 3, 4, 5])
torch.Size([6])
print(input.unsqueeze(0))
print(input.unsqueeze(0).shape)
结果:
tensor([[0, 1, 2, 3, 4, 5]])
torch.Size([1, 6])
torch.cat &torch.stack(sequence, dim=0, out=None),
做tensor的拼接。sequence表示Tensor列表,dim表示拼接的维度,注意这个函数和concatenate是不同的,
- torch的concatenate函数是torch.cat,是在已有的维度上拼接,
- 而stack是建立一个新的维度,然后再在该纬度上进行拼接
torch.cat(seq,dim=0,out=None) # 沿着dim连接seq中的tensor, 所有的tensor必须有相同的size或为empty, 其相反的操作为 torch.split() 和torch.chunk()
torch.stack(seq, dim=0, out=None) #同上
#注: .cat 和 .stack的区别在于 cat会增加现有维度的值,可以理解为续接,stack会新加增加一个维度,可以
理解为叠加
>>> a=torch.Tensor([1,2,3])
>>> torch.stack((a,a)).size()
torch.size(2,3)
>>> torch.cat((a,a)).size()
torch.size(6)
expand_as(a)
这是tensor变量的一个内置方法,如果使用b.expand_as(a)就是将b进行扩充,扩充到a的维度,需要说明的是a的低维度需要比b大,例如b的shape是31,如果a的shape是32不会出错,但是是2*2就会报错了
torch.eye(n,m=None,out=None)))返回一个2维张量,对角线位置全为1,其他位置全0
torch.from_numpy(ndarray)—->Tensor
比较操作
torch.max/mean(input,dim=1,max=None,max_indices=None)—->(Tensor,LongTensor)
torch.Tensor.expand()&torch.Tensor.expand_as())torch.Tensor.expand(sizes) → Tensorrr扩大张量,并且将张量复制使之变为对应size大小
torch.numel() 返回tensor变量内所有元素的个数,也可以简单理解为矩阵内yu元素的个数数数 例如,a的size为([64, 3, 7, 7]),那么a.numel() 返回值为6437*7=9408
Element-Wise &Broadcasting
https://cloud.tencent.com/developer/article/1621257
张量之间的加法是一个element-wise 操作。在相应位置的每一对元素被加在一起,产生一个新的相同形状的张量。
加法是一种element-wise 运算,事实上,所有的算术运算,加、减、乘、除都是element-wise 运算。
尽管这两个张量有不同的形状,但element-wise操作是可能的,而 broadcasting 使得运算成为可能。低阶张量t2将通过broadcasting 进行变换,以匹配高阶张量t1的形状,element-wise 操作将照常进行。
broadcasting之后,这两个张量之间的加法运算是同一形状张量之间的element-wise 运算。
t1 = torch.tensor([
[1,1],
[1,1]
], dtype=torch.float32)
t2 = torch.tensor([2,4], dtype=torch.float32)
> np.broadcast_to(t2.numpy(), t1.shape)
array([[2., 4.],
[2., 4.]], dtype=float32)
> t1 + t2
tensor([[3., 5.],
[3., 5.]])