Pytorch中pad函数toch.nn.functional.pad()的用法
padding操作是给图像外围加像素点。
为了实际说明操作过程,这里我们使用一张实际的图片来做一下处理。


这张图片是大小是(256,256),使用pad来给它加上一个黑色的边框。具体代码如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import torch.nn,functional as Fimport torchfrom PIL import Imageim=Image.open("heibai.jpg",'r')X=torch.Tensor(np.asarray(im))print("shape:",X.shape)dim=(10,10,10,10)X=F.pad(X,dim,"constant",value=0)padX=X.data.numpy()padim=Image.fromarray(padX)padim=padim.convert("RGB")#这里必须转为RGB不然会padim.save("padded.jpg","jpeg")padim.show()print("shape:",padX.shape) |
输出:
|
1
2
|
shape: torch.Size([256, 256])shape: (276, 276) |
可以看出给原图四个方向给加上10维度的0,维度变为256+10+10得到的图像如下:


再举几个简单例子:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
x=np.asarray([[[1,2],[1,2]]])X=torch.Tensor(x)print(X.shape)pad_dims = ( 2, 2, 2, 2, 1, 1, )X=F.pad(X,pad_dims,"constant")print(X.shape)print(X) |
输出:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
torch.Size([1, 2, 2])torch.Size([3, 6, 6])tensor([[[ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.]], [[ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 1., 2., 0., 0.], [ 0., 0., 1., 2., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.]], [[ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.]]]) |
可以知若pad_dims为(2,2,2,2,1,1)则原维度变化是2+2+2=6,1+1+1=3.也就是第一个(2,2) pad的是最后一个维度,第二个(2,2) pad是倒数第二个维度,第三个(1,1) pad是第一个维度。
再举一个四维度的,但是只pad三个维度:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
x=np.asarray([[[[1,2],[1,2]]]])X=torch.Tensor(x)#(1,2,2)print(X.shape)pad_dims = ( 2, 2, 2, 2, 1, 1, )X=F.pad(X,pad_dims,"constant")#(1,1,12,12)print(X.shape)print(X) |
输出:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
torch.Size([1, 1, 2, 2])torch.Size([1, 3, 6, 6])tensor([[[[ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.]], [[ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 1., 2., 0., 0.], [ 0., 0., 1., 2., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.]], [[ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.]]]]) |
再举一个四维度的,pad四个维度:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
x=np.asarray([[[[1,2],[1,2]]]])X=torch.Tensor(x)#(1,2,2)print(X.shape)pad_dims = ( 2, 2, 2, 2, 1, 1, 2, 2 )X=F.pad(X,pad_dims,"constant")#(1,1,12,12)print(X.shape)print(X) |
输出:
|
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
|
torch.Size([1, 1, 2, 2])torch.Size([5, 3, 6, 6])tensor([[[[ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.]], [[ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.]], [[ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.]]], |
Pytorch中pad函数toch.nn.functional.pad()的用法的更多相关文章
- pytorch中文文档-torch.nn.init常用函数-待添加
参考:https://pytorch.org/docs/stable/nn.html torch.nn.init.constant_(tensor, val) 使用参数val的值填满输入tensor ...
- ARTS-S pytorch中backward函数的gradient参数作用
导数偏导数的数学定义 参考资料1和2中对导数偏导数的定义都非常明确.导数和偏导数都是函数对自变量而言.从数学定义上讲,求导或者求偏导只有函数对自变量,其余任何情况都是错的.但是很多机器学习的资料和开源 ...
- pytorch中文文档-torch.nn常用函数-待添加-明天继续
https://pytorch.org/docs/stable/nn.html 1)卷积层 class torch.nn.Conv2d(in_channels, out_channels, kerne ...
- ARTS-S pytorch中Conv2d函数padding和stride含义
padding是输入数据最边缘补0的个数,默认是0,即不补0. stride是进行一次卷积后,特征图滑动几格,默认是1,即滑动一格.
- 交叉熵的数学原理及应用——pytorch中的CrossEntropyLoss()函数
分类问题中,交叉熵函数是比较常用也是比较基础的损失函数,原来就是了解,但一直搞不懂他是怎么来的?为什么交叉熵能够表征真实样本标签和预测概率之间的差值?趁着这次学习把这些概念系统学习了一下. 首先说起交 ...
- PyTorch 中,nn 与 nn.functional 有什么区别?
作者:infiniteft链接:https://www.zhihu.com/question/66782101/answer/579393790来源:知乎著作权归作者所有.商业转载请联系作者获得授权, ...
- pytorch 中的重要模块化接口nn.Module
torch.nn 是专门为神经网络设计的模块化接口,nn构建于autgrad之上,可以用来定义和运行神经网络 nn.Module 是nn中重要的类,包含网络各层的定义,以及forward方法 对于自己 ...
- 『PyTorch』第十二弹_nn.Module和nn.functional
大部分nn中的层class都有nn.function对应,其区别是: nn.Module实现的layer是由class Layer(nn.Module)定义的特殊类,会自动提取可学习参数nn.Para ...
- PyTorch : torch.nn.xxx 和 torch.nn.functional.xxx
PyTorch : torch.nn.xxx 和 torch.nn.functional.xxx 在写 PyTorch 代码时,我们会发现一些功能重复的操作,比如卷积.激活.池化等操作.这些操作分别可 ...
随机推荐
- 如何在 IDEA 中添加 Maven 项目的 Archetype(解决添加不起作用的问题)
前言 在 IDEA 中点击新建 Maven 模块,会发现他已经为我们罗列出来了许多的 archetype,但有些时候满足不了我们的需求.下面就来看看如何添加自己的脚手架吧. 实现过程 新建模块 在 I ...
- file类和fileinfo类的简单对比
File类:提供用于操作文件的静态方法. FileInfo类:提供操作文件的属性和实例方法. Directory类:提供用于操作目录的静态方法. DirectoryInfo类:提供用于操作目录的实例方 ...
- 「LOJ 6373」NOIP2017 普及组题目大融合
NOIP2017 普及组题目大融合 每个读者需要有某个后缀的书,可以暴力map,复杂度\(o(9*nlog(n))\),也可以反串建trie树,复杂度\(o(9*n)\). 故可以求出需要的最少的RM ...
- AT2699 [ARC081D] Flip and Rectangles
以下是简要题解: 首先思考如何判定一个矩形是否能通过操作变成全黑. 首先从简单而又特殊的 \(2 \times 2\) 的矩形开始,不难发现只要其中黑色数量不为奇数即可. 近一步拓展可以发现,一个矩形 ...
- rabbitMq使用guest登录不上的问题总结
自己mac电脑上的mq在电脑关机(直接按电源键关机),在开机后,rabbitMq连不上了,报500错误. 1.在使用brew uninstall rabbitmq --force后; 2.我手动安装了 ...
- java getSource()和 getActionCommand()区别
感谢大佬:https://blog.csdn.net/LIU_YANZHAO/article/details/72740011?utm_source=blogxgwz1 比如说 按纽的事件,同一个JF ...
- ARC基本概念
1.什么是ARC Automatic Reference Counting,自动引用计数,即ARC,可以说是WWDC2011和iOS5所引入 的最大的变革和最激动人心的变化.ARC是新的LLVM 3. ...
- 如何定制docker容器的系统时间
Dockerfile加入下面一句(标红的部分): FROM xxxxxxENV JAVA_OPTS="-Dfile.encoding=UTF-8"ENV TZ=Asia/Shang ...
- Java基础复习(六)
1. 接口的实现类中的实现接口中的抽象方法的方法必须为public,为什么? 接口中所有的方法与变量都默认是 public 的,在接口中可以不写出来.但在实现类中,如果不明写的话,就变成了 frien ...
- MySQL 数据库高级操作 (配图)
MySQL数据库高级操作 1.一键部署mysql 数据库 2.数据表高级操作 3.数据库用户管理 4.数据库用户授权 1.首先一键部署mysql 数据库 : 可以看我之前的博客 https://www ...