Pytorch常用函数

本文详细介绍了PyTorch中的几个关键函数,包括torch.from_numpy用于numpy数组与tensor之间的转换,torch.meshgrid用于生成网格坐标,torch.stack用于沿着新维度连接张量,torch.repeat用于张量的重复扩充,以及torch.permute用于张量维度的重新排列。每个函数都附带了官方文档链接和实例演示,适合图像处理和深度学习领域的开发者参考。
摘要由CSDN通过智能技术生成

本文记录Pytorch常用函数,值得一提的是本文的所有涉及函数都会给出官方文档链接,我想这可能会节约您的时间。个人应用场景为图像处理、深度学习、计算机视觉。

目录

torch.from_numpy

torch.meshgrid

 torch.stack

torch.repeat

torch.permute


  • torch.from_numpy

torch.from_numpy(ndarray) → Tensor

将一个numpy的ndarray类型转换为tensor类型(与之对应,用tensor的.numpy方法可以将tensor变成Numpy)

例子:
 

 官方文档链接:

torch.from_numpy — PyTorch 1.12 documentation

  • torch.meshgrid

torch.meshgrid(*tensorsindexing=None)

        torch.meshgrid()的功能是生成网格,可以用于生成坐标。函数输入两个数据类型相同的一维张量,两个输出张量的行数为第一个输入张量的元素个数,列数为第二个输入张量的元素个数,当两个输入张量数据类型不同或维度不是一维时会报错。

        其中第一个输出张量填充第一个输入张量中的元素,各行元素相同;第二个输出张量填充第二个输入张量中的元素各列元素相同。

 在我看来,torch.meshgrid函数就像我之前写得加None升维的作用一样,就是为了构造x的一个元素对应y的所有元素(或者说类似构造三维输出,已知x坐标和y坐标然后一个x的坐标对应多个y)

 官方文档链接:

torch.meshgrid — PyTorch 1.12 documentation

  •  torch.stack

torch.stack(tensorsdim=0*out=None) → Tensor

 沿新维度连接一系列张量。 序列中所有的张量都应该为相同形状。

官方文档链接:

torch.stack — PyTorch 1.12 documentation

  • torch.repeat

 PyTorch中的repeat()函数可以对张量进行重复扩充[1]。

当参数只有两个时:(列的重复倍数,行的重复倍数)。1表示不重复

当参数有三个时:(通道数的重复倍数,列的重复倍数,行的重复倍数)。

import torch
a= torch.arange(30).reshape(5,6)
print(a)
print('b:',a.repeat(2,2))
print('c:',a.repeat(2,1,1))
/usr/bin/python3 /home/thu/test_python/repeat.py
tensor([[ 0,  1,  2,  3,  4,  5],
        [ 6,  7,  8,  9, 10, 11],
        [12, 13, 14, 15, 16, 17],
        [18, 19, 20, 21, 22, 23],
        [24, 25, 26, 27, 28, 29]])
b: tensor([[ 0,  1,  2,  3,  4,  5,  0,  1,  2,  3,  4,  5],
        [ 6,  7,  8,  9, 10, 11,  6,  7,  8,  9, 10, 11],
        [12, 13, 14, 15, 16, 17, 12, 13, 14, 15, 16, 17],
        [18, 19, 20, 21, 22, 23, 18, 19, 20, 21, 22, 23],
        [24, 25, 26, 27, 28, 29, 24, 25, 26, 27, 28, 29],
        [ 0,  1,  2,  3,  4,  5,  0,  1,  2,  3,  4,  5],
        [ 6,  7,  8,  9, 10, 11,  6,  7,  8,  9, 10, 11],
        [12, 13, 14, 15, 16, 17, 12, 13, 14, 15, 16, 17],
        [18, 19, 20, 21, 22, 23, 18, 19, 20, 21, 22, 23],
        [24, 25, 26, 27, 28, 29, 24, 25, 26, 27, 28, 29]])
c: tensor([[[ 0,  1,  2,  3,  4,  5],
         [ 6,  7,  8,  9, 10, 11],
         [12, 13, 14, 15, 16, 17],
         [18, 19, 20, 21, 22, 23],
         [24, 25, 26, 27, 28, 29]],
 
        [[ 0,  1,  2,  3,  4,  5],
         [ 6,  7,  8,  9, 10, 11],
         [12, 13, 14, 15, 16, 17],
         [18, 19, 20, 21, 22, 23],
         [24, 25, 26, 27, 28, 29]]])
 
Process finished with exit code 0
  • torch.permute

torch.permute(inputdims)

参数:

input:输入张量

dims:(元组类型)需要交换的维度

当然我们一般不会直接用torch.permute,而是对一个tensor调用其permute方法:

例子:改变图像的维度顺序(c*h*w)

注意:reshape并不能起到改变通道顺序的功能(可以看到结果是不对的):

官方文档链接:

torch.permute — PyTorch 1.12 documentation

  • torch.numpy,torch.from_numpy实现tensor和numpy的互换

  •  torch.detach

官方解释:


返回一个从当前计算图中分离下来的新的tensor,但是仍指向原变量的存放位置,不同之处只是requires_grad为false,得到的这个tensor永远不需要计算其梯度,不具有grad。

即使之后重新将它的requires_grad置为true,它也不会具有梯度grad

这样我们就会继续使用这个新的tensor进行计算,后面当我们进行反向传播时,到该调用detach()的tensor就会停止,不能再继续向前进行传播!

当我们再训练网络的时候可能希望保持一部分的网络参数不变,只对其中一部分的参数进行调整;或者值训练部分分支网络,并不让其梯度对主网络的梯度造成影响,这时候我们就需要使用detach()函数来切断一些分支的反向传播

官方文档:

torch.Tensor.detach — PyTorch 1.12 documentation

待更新... 

参考资料:

[1].torch.repeat()_dspeia的博客-CSDN博客_torch.repeat

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值