【torch.nn.PixelShuffle】和 【torch.nn.UnpixelShuffle】

这篇具有很好参考价值的文章主要介绍了【torch.nn.PixelShuffle】和 【torch.nn.UnpixelShuffle】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

torch.nn.PixelShuffle

直观解释

PixelShuffle是一种上采样方法,它将形状为 ( ∗ , C × r 2 , H , W ) (∗, C\times r^2, H, W) (,C×r2,H,W)的张量重新排列转换为形状为 ( ∗ , C , H × r , W × r ) (∗, C, H\times r, W\times r) (,C,H×r,W×r)的张量:
【torch.nn.PixelShuffle】和 【torch.nn.UnpixelShuffle】,深度学习框架,python,pytorch,PixelShuffle


举个例子
输入的张量大小是(1,8,2,3),PixelShuffle的 缩放因子是r=2

import torch
ps=torch.nn.PixelShuffle(2)
input=torch.arange(0,48).view(1,8,2,3)
print(input)
output=ps(input)
print(output)
print(output.shape)

如下图可以看到,PixelShuffle是把输入通道按照缩放因子r^2进行划分成8/(2^2)=2 组。
也就是输入的第一组(前4个通道)中的元素,每次间隔r=2 交错排列,合并成输出的第一个通道维度。
输入的第二组(后4个通道)中的元素,每次间隔r=2交错排列,合并成输出通道的第二个维度。
输入的大小为(batchsize,in_channel,in_height,in_width)=(1,8,2,3)
输出的大小为(batchsize,out_channel,out_height,out_width)(1,2,4,6)

各个维度的变化规律如下:
batchsize 不变;
out_channel=in_channel/(r^2)
out_height=in_height*r
out_width=in_width*r
【torch.nn.PixelShuffle】和 【torch.nn.UnpixelShuffle】,深度学习框架,python,pytorch,PixelShuffle

官方文档

CLASS
torch.nn.PixelShuffle(upscale_factor)
  • 功能: 把大小为 ( ∗ , C × r 2 , H , W ) (*,C\times r^2,H,W) (,C×r2,H,W)的张量重新排列为大小为 ( ∗ , C , H × r , W × r ) (*,C,H\times r,W\times r) (,C,H×r,W×r) , 其中 r r r 是 upscale factor 。

    这个操作对于实现步长为 1 r \frac {1}{r} r1efficient sub-pixel convolution有用。

  • 参数

    • upscale_factor(int) : 增加空间分辨率的因子
  • 形状

    • 输入: ( ∗ , C i n , H i n , W i n ) (*,C_{in},H_{in},W_{in}) (,Cin,Hin,Win) ,其中 ∗ * 是 0 或者batch大小

    • 输出: ( ∗ , C o u t , H o u t , W o u t ) (*,C_{out},H_{out},W_{out}) (,Cout,Hout,Wout) , 其中

      C out  = C in  ÷ u p s c a l e _ f a c t o r 2 H out  = H in  × u p s c a l e _ f a c t o r W out  = W in  × u p s c a l e _ f a c t o r C_{\text {out }}=C_{\text {in }} \div upscale\_factor ^2 \\ H_{\text {out }}=H_{\text {in }} \times upscale\_factor \\ W_{\text {out }}=W_{\text {in }} \times upscale\_factor Cout =Cin ÷upscale_factor2Hout =Hin ×upscale_factorWout =Win ×upscale_factor

  • 例子文章来源地址https://www.toymoban.com/news/detail-636297.html

>>> pixel_shuffle = nn.PixelShuffle(3)
>>> input = torch.randn(1, 9, 4, 4)
>>> output = pixel_shuffle(input)
>>> print(output.size())
torch.Size([1, 1, 12, 12])

torch.nn.PixelUnshuffle

直观解释

PixelUnshuffle就是PixelShuffle的逆操作。

import torch
pus=torch.nn.PixelUnshuffle(2)
input_restore=pus(putput)
print(input_restore)
print(input_restore.shape)
print(input_restore==input) # input_restore和input一样

官方文档

CLASS
torch.nn.PixelUnshuffle(downscale_factor)
  • 功能: 是PixelShuffle的逆操作,把大小为 ( ∗ , C , H × r , W × r ) (*,C,H\times r,W\times r) (,C,H×r,W×r)的张量重组成大小为 ( ∗ , C × r , H , W ) (*,C\times r,H,W) (,C×r,H,W)的张量。其中 r r r 是downscale factor。

  • 参数:

    • downscale_factor (int) : 降低空间分辨率的因子。
  • 形状:

    • 输入: ( ∗ , C i n , H i n , W i n ) (*,C_{in},H_{in},W_{in}) (,Cin,Hin,Win), 其中 ∗ * 是 0 或者batch大小

    • 输出: ( ∗ , C o u t , H o u t , W o u t ) (*,C_{out},H_{out},W_{out}) (,Cout,Hout,Wout), 其中

      C out  = C in  ×  downscale  _ factor  2 H out  = H in  ÷  downscale  _ factor  W out  = W in  ÷  downscale  _ factor  \begin{aligned}& C_{\text {out }}=C_{\text {in }} \times \text { downscale } \_ \text {factor }{ }^2 \\& H_{\text {out }}=H_{\text {in }} \div \text { downscale } \_ \text {factor } \\& W_{\text {out }}=W_{\text {in }} \div \text { downscale } \_ \text {factor }\end{aligned} Cout =Cin × downscale _factor 2Hout =Hin ÷ downscale _factor Wout =Win ÷ downscale _factor 

  • 例子

>>> pixel_unshuffle = nn.PixelUnshuffle(3)
>>> input = torch.randn(1, 1, 12, 12)
>>> output = pixel_unshuffle(input)
>>> print(output.size())
torch.Size([1, 9, 4, 4])

到了这里,关于【torch.nn.PixelShuffle】和 【torch.nn.UnpixelShuffle】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Pytorch学习:神经网络模块torch.nn.Module和torch.nn.Sequential

    官方文档:torch.nn.Module CLASS torch.nn.Module(*args, **kwargs) 所有神经网络模块的基类。 您的模型也应该对此类进行子类化。 模块还可以包含其他模块,允许将它们嵌套在树结构中。您可以将子模块分配为常规属性: training(bool) -布尔值表示此模块是处于训练模式还是评估模式。

    2024年02月10日
    浏览(43)
  • 深度学习—Python、Cuda、Cudnn、Torch环境配置搭建

    近期由于毕设需要使用Yolo,于是经过两天捣腾,加上看了CSDN上各位大佬的经验帖后,成功搭建好了GPU环境,并能成功使用。因而在此写下这次搭建的历程。 万事开头难,搭建环境很费时间,如果一开始版本不对应,到后面就要改来改去,很麻烦。首先要注意以下事项: 1.

    2024年02月11日
    浏览(211)
  • python中的torch.nn.Softmax() 用法和例子 dim=1 dim=2

    torch.nn.Softmax() 是 PyTorch 中的一个类,用于实现 softmax 函数。softmax 函数是一种常用的激活函数,它可以将一个向量转换成一个概率分布,使得每个元素都是非负数且和为 1。softmax 函数通常在分类问题中使用,可以将一个多分类问题转换成多个二分类问题,从而得到每个类别的

    2024年02月16日
    浏览(105)
  • python 理解BN、LN、IN、GN归一化、分析torch.nn.LayerNorm()和torch.var()工作原理

    目录   前言: 简言之BN、LN、IN、GN等归一化的区别: 批量归一化(Batch Normalization,BN) 优点 缺点 计算过程 层归一化(Layer Normalization,LN) 优点  计算过程 总结 分析torch.nn.LayerNorm()工作原理 分析torch.var()工作原理 torch.var()函数  参数 参数 重点 最近在学习Vit(Vision Trans

    2023年04月16日
    浏览(38)
  • Pytorch学习笔记(5):torch.nn---网络层介绍(卷积层、池化层、线性层、激活函数层)

     一、卷积层—Convolution Layers  1.1 1d / 2d / 3d卷积 1.2 卷积—nn.Conv2d() nn.Conv2d 1.3 转置卷积—nn.ConvTranspose nn.ConvTranspose2d  二、池化层—Pooling Layer (1)nn.MaxPool2d (2)nn.AvgPool2d (3)nn.MaxUnpool2d  三、线性层—Linear Layer  nn.Linear  四、激活函数层—Activate Layer (1)nn.Sigmoid  (

    2024年01月20日
    浏览(44)
  • torch.nn.BCEWithLogitsLoss与torch.nn.BCELoss

    torch.nn.BCEWithLogitsLoss 相当于 sigmoid + torch.nn.BCELoss 。代码示例如下,

    2024年02月16日
    浏览(41)
  • 【torch.nn.Fold】和【torch.nn.Unfold】

    torhc.nn.Unfold的功能: 从一个batch的样本中,提取出滑动的局部区域块 patch (也就是卷积操作中的提取kernel filter对应的滑动窗口)把它按照顺序展开,得到的特征数就是 通道数*卷积核的宽*卷积核的高 , 下图中的 L 就是滑动完成后总的 patch的个数 。 举个例子: 下图中的红框

    2024年02月13日
    浏览(31)
  • torch.nn.BCELoss

    torch.nn.BCELoss用于计算二分类问题或多标签分类问题的交叉熵损失。 torch.nn.BCELoss需要配合Sigmoid函数使用。 对于二分类问题,若使用Softmax函数,则最后一层全连接层的神经元个数为2; 若使用Sigmoid函数,则最后一层全连接层的神经元个数为1。假设有一猫狗二分类问题,经Si

    2024年02月16日
    浏览(42)
  • torch.nn.CrossEntropyLoss()

    计算过程 nn.CrossEntropyLoss()=nn.LogSoftmax()+nn.NLLLoss()  

    2024年01月22日
    浏览(37)
  • torch.nn.Linear详解

    在学习transformer时,遇到过非常频繁的nn.Linear()函数,这里对nn.Linear进行一个详解。 参考:https://pytorch.org/docs/stable/_modules/torch/nn/modules/linear.html 从名称就可以看出来,nn.Linear表示的是线性变换,原型就是初级数学里学到的线性函数: y=kx+b 不过在深度学习中,变量都是多维张

    2023年04月09日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包