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 F
import torch
from PIL import Image
im=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.]]],

最新文章

  1. 新浪云SAE搭建python环境 问题拾遗
  2. VS Extract Method
  3. Android 中dp和px
  4. 通过btn获取所在cell
  5. linq 多条件查询
  6. css3中的几何图形shape研究
  7. [SQL]SQL优化34条
  8. Objective C中nil/Nil/NULL的区别
  9. mac远程连接 win8
  10. transition和animation动画简介
  11. java求阶乘
  12. GUI(JMenuBar+JMenu+JMenuItem)
  13. mysql多个TimeStamp设置(转)
  14. windows10禁用更新方法
  15. 优化MySQL性能的几种方法-总结
  16. 关于前缀和,A - Hamming Distance Sum
  17. SVM的sklearn实现
  18. 跳台阶(python)
  19. LintCode——全排列
  20. Secure CRT 自动记录日志log配置

热门文章

  1. 使用require.context实现前端工程自动化
  2. Net6 DI源码分析Part1 ServiceCollection、ServiceDescriptor、ServiceLifetime、IServiceProvider
  3. windows doc命令复制粘贴文件
  4. NSMutableArray基本概念
  5. shell脚本三剑客之awk
  6. Python--操作列表
  7. Net6 DI源码分析Part3 CallSiteRuntimeResolver,CallSiteVisitor
  8. 【密码学工具】Ciphey和WinDecrypto的使用随笔
  9. java+selenium自动化脚本编写
  10. fork_join