1)ReflectionPad2d

CLASS torch.nn.ReflectionPad2d(padding)

使用输入边界的反射来填充输入tensor

对于N维的填充,使用torch.nn.functional.pad()

参数:

  • padding(int, tuple):指定填充的大小。如果是一个整数值a,则所有边界都使用相同的填充数,等价于输入(a,a,a,a)。如果是大小为4的元组,则表示 (padding_leftpadding_left, padding_rightpadding_right, padding_toppadding_top, padding_bottompadding_bottom)

形状:

  • 输入:(N,C,Hin​,Win​)
  • 输出:(N,C,Hout​,Wout​)

计算式子为:

  • Hout​=Hin​+padding_top+padding_bottom
  • Wout​=Win​+padding_left+padding_right

举例:

(deeplearning) userdeMacBook-Pro:pytorch-CycleGAN-and-pix2pix user$ python
Python 3.6. |Anaconda, Inc.| (default, Dec , ::)
[GCC 4.2. Compatible Clang 4.0. (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from torch import nn
>>> import torch
>>> m = nn.ReflectionPad2d()
>>> input = torch.arange(, dtype=torch.float).reshape(,,,)
>>> m(input)
tensor([[[[., ., ., ., ., ., .],
[., ., ., ., ., ., .],
[., ., ., ., ., ., .],
[., ., ., ., ., ., .],
[., ., ., ., ., ., .],
[., ., ., ., ., ., .],
[., ., ., ., ., ., .]]]]) >>> m = nn.ReflectionPad2d()
>>> m(input)
tensor([[[[., ., ., ., .],
[., ., ., ., .],
[., ., ., ., .],
[., ., ., ., .],
[., ., ., ., .]]]])

从例子可见,填充的值就是对应边界旁边的值,即反射填充

⚠️padding的大小要小于输入的大小,否则报错:

>>> m = nn.ReflectionPad2d()
>>> m(input)
Traceback (most recent call last):
File "<stdin>", line , in <module>
File "/anaconda3/envs/deeplearning/lib/python3.6/site-packages/torch/nn/modules/module.py", line , in __call__
result = self.forward(*input, **kwargs)
File "/anaconda3/envs/deeplearning/lib/python3.6/site-packages/torch/nn/modules/padding.py", line , in forward
return F.pad(input, self.padding, 'reflect')
File "/anaconda3/envs/deeplearning/lib/python3.6/site-packages/torch/nn/functional.py", line , in pad
ret = torch._C._nn.reflection_pad2d(input, pad)
RuntimeError: Argument #: Padding size should be less than the corresponding input dimension, but got: padding (, ) at dimension of input [, , , ]
>>>

2)ReplicationPad2d

CLASS torch.nn.ReplicationPad2d(padding)

使用输入边界的复制值来填充输入tensor

对于N维的填充,使用torch.nn.functional.pad()

参数:

  • padding(int, tuple):指定填充的大小。如果是一个整数值a,则所有边界都使用相同的填充数,等价于输入(a,a,a,a)。如果是大小为4的元组,则表示 (padding_leftpadding_left, padding_rightpadding_right, padding_toppadding_top, padding_bottompadding_bottom)

形状:

  • 输入:(N,C,Hin​,Win​)
  • 输出:(N,C,Hout​,Wout​)

计算式子为:

  • Hout​=Hin​+padding_top+padding_bottom
  • Wout​=Win​+padding_left+padding_right

举例:

>>> m = nn.ReplicationPad2d()
>>> m(input)
tensor([[[[., ., ., ., ., ., .],
[., ., ., ., ., ., .],
[., ., ., ., ., ., .],
[., ., ., ., ., ., .],
[., ., ., ., ., ., .],
[., ., ., ., ., ., .],
[., ., ., ., ., ., .]]]])
>>>

可见填充的边界是啥,填充的值就是啥

3)ZeroPad2d

CLASS torch.nn.ZeroPad2d(padding)

使用0填充输入tensor的边界

对于N维的填充,使用torch.nn.functional.pad()

参数:

  • padding(int, tuple):指定填充的大小。如果是一个整数值a,则所有边界都使用相同的填充数,等价于输入(a,a,a,a)。如果是大小为4的元组,则表示 (padding_leftpadding_left, padding_rightpadding_right, padding_toppadding_top, padding_bottompadding_bottom)

形状:

  • 输入:(N,C,Hin​,Win​)
  • 输出:(N,C,Hout​,Wout​)

计算式子为:

  • Hout​=Hin​+padding_top+padding_bottom
  • Wout​=Win​+padding_left+padding_right

举例:

>>> m = nn.ZeroPad2d()
>>> m(input)
tensor([[[[., ., ., ., ., ., .],
[., ., ., ., ., ., .],
[., ., ., ., ., ., .],
[., ., ., ., ., ., .],
[., ., ., ., ., ., .],
[., ., ., ., ., ., .],
[., ., ., ., ., ., .]]]])
>>>

ConstantPad2d

CLASS torch.nn.ConstantPad2d(padding, value)

使用一个常量值填充输入tensor边界

对于N维的填充,使用torch.nn.functional.pad()

参数:

  • padding(int, tuple):指定填充的大小。如果是一个整数值a,则所有边界都使用相同的填充数,等价于输入(a,a,a,a)。如果是大小为4的元组,则表示 (padding_leftpadding_left, padding_rightpadding_right, padding_toppadding_top, padding_bottompadding_bottom)
  • value:填充的常量值

形状:

  • 输入:(N,C,Hin​,Win​)
  • 输出:(N,C,Hout​,Wout​)

计算式子为:

  • Hout​=Hin​+padding_top+padding_bottom
  • Wout​=Win​+padding_left+padding_right

举例:

>>> m = nn.ConstantPad2d(,3.99)
>>> m(input)
tensor([[[[3.9900, 3.9900, 3.9900, 3.9900, 3.9900, 3.9900, 3.9900],
[3.9900, 3.9900, 3.9900, 3.9900, 3.9900, 3.9900, 3.9900],
[3.9900, 3.9900, 0.0000, 1.0000, 2.0000, 3.9900, 3.9900],
[3.9900, 3.9900, 3.0000, 4.0000, 5.0000, 3.9900, 3.9900],
[3.9900, 3.9900, 6.0000, 7.0000, 8.0000, 3.9900, 3.9900],
[3.9900, 3.9900, 3.9900, 3.9900, 3.9900, 3.9900, 3.9900],
[3.9900, 3.9900, 3.9900, 3.9900, 3.9900, 3.9900, 3.9900]]]])
>>>

pytorch常用的padding函数的更多相关文章

  1. pytorch常用函数总结(持续更新)

    pytorch常用函数总结(持续更新) torch.max(input,dim) 求取指定维度上的最大值,,返回输入张量给定维度上每行的最大值,并同时返回每个最大值的位置索引.比如: demo.sha ...

  2. PyTorch常用代码段整理合集

    PyTorch常用代码段整理合集 转自:知乎 作者:张皓 众所周知,程序猿在写代码时通常会在网上搜索大量资料,其中大部分是代码段.然而,这项工作常常令人心累身疲,耗费大量时间.所以,今天小编转载了知乎 ...

  3. 交叉熵的数学原理及应用——pytorch中的CrossEntropyLoss()函数

    分类问题中,交叉熵函数是比较常用也是比较基础的损失函数,原来就是了解,但一直搞不懂他是怎么来的?为什么交叉熵能够表征真实样本标签和预测概率之间的差值?趁着这次学习把这些概念系统学习了一下. 首先说起交 ...

  4. 常用的WinAPI函数整理

    常用的WinAPI函数整理 一.进程  创建进程:    CreateProcess("C:\\windows\\notepad.exe",0,0,0,0,0,0,0,&s ...

  5. 最常用的截取函数有left,right,substring

    最常用的截取函数有left,right,substring 1.LEFT ( character_expression , integer_expression ) 返回从字符串左边开始指定个数的字符 ...

  6. Appium常用的API函数

    在学习应用一个框架之前,应该了解一下这个框架的整体结构或是相应的API函数.这篇文章还不错:http://blog.sina.com.cn/s/blog_68f262210102vzf9.html,就 ...

  7. MYSQL常用内置函数详解说明

    函数中可以将字段名当作变量来用,变量的值就是该列对应的所有值:在整理98在线字典数据时(http://zidian.98zw.com/),有这要一个需求,想从多音字duoyinzi字段值提取第一个拼音 ...

  8. 常用的Sql 函数

    常用的Sql 函数 1: replace 函数,替换字符. 语法 replace (original-string, search-string, replace-string ) 第一个参数你的字符 ...

  9. 【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame事件与设备轮询.http://www.cnblogs.com/msxh ...

随机推荐

  1. python3 推荐使用super调用base类方法

    from:https://python3-cookbook.readthedocs.io/zh_CN/latest/c08/p07_calling_method_on_parent_class.htm ...

  2. linux简单的命令

    本文转自 https://www.cnblogs.com/pyyu/articles/9314206.html Linux命令行的组成结构 [root@oldboy_python ~]# [root@ ...

  3. 为什么引入Memcached?

    刚memcached了解学习,一直是处于一个懵懂的状态,先是对memcached进行了一个了解,但我们为什么要在ITOO中引入memcached呢?当问我的时候当时自己脑子中打了一个大大的 这就必须去 ...

  4. Python语言程序设计(2)--深入理解python

  5. 04 Spring的依赖注入

    依赖注入:Dependency Injection.它是 spring 框架核心 ioc 的具体实现. 我们的程序在编写时,通过控制反转,把对象的创建交给了 spring,但是代码中不可能出现没有依赖 ...

  6. python中的一切皆对象

    python中一切皆对象是这个语言灵活的根本.函数和类也是对象,属于python的一等公民.包括代码包和模块也都是对象.python的面向对象更加彻底. 可以赋值给一个变量可以添加到集合对象中可以作为 ...

  7. 开放API接口安全处理

    一.开放API接口定义 顾名思义,开放出来给其他人调用的API接口就是开放API接口.例如,短信接口.邮件接口. 二.开放API的弱点 数据窃取 用户的密码等信息被不轨之人窃取,登录账号发布敏感信息, ...

  8. 动手动脑-------找出指定文件夹下所有扩展名为.txt和.java的文件

    思路:首先向获取文件,如果是文件的话,则判断它是否以".txt"或".java"结尾,如果是则输出它的路径.如果是文件夹的话,则需获取子文件,利用递归方法遍历子 ...

  9. php自定义函数之参数的引用

    在变量这个函数中,我们学习了变量的引用,我们来回顾一下知识:大理石平台支架 <?php $a = 10; $b = &$a; $a = 100; echo $a.'---------'. ...

  10. 19、Executor原理剖析与源码分析

    一.原理图解 二.源码分析 1.Executor注册机制 worker中为Application启动的executor,实际上是启动了这个CoarseGrainedExecutorBackend进程: ...