torch.nn.functional.pad是PyTorch内置的矩阵填充函数

(1).torch.nn.functional.pad函数详细描述如下:

torch.nn.functional.pad(input, pad, mode,value ) 
Args:
	"""
	input:四维或者五维的tensor Variabe
	pad:不同Tensor的填充方式
		1.四维Tensor:传入四元素tuple(pad_l, pad_r, pad_t, pad_b),
		指的是(左填充,右填充,上填充,下填充),其数值代表填充次数
		2.六维Tensor:传入六元素tuple(pleft, pright, ptop, pbottom, pfront, pback),
		指的是(左填充,右填充,上填充,下填充,前填充,后填充),其数值代表填充次数
	mode: ’constant‘, ‘reflect’ or ‘replicate’三种模式,指的是常量,反射,复制三种模式
	value:填充的数值,在"contant"模式下默认填充0,mode="reflect" or "replicate"时没有			
		value参数
		
	"""

(2).代码演示(举个四维Tensor填充的例子)

1.获取一个shape=(2,1,3,2)的随机数矩阵

import torch
import torch.nn.functional as F
original_values = torch.randn([2,1, 3, 2])
print("original_values: ",original_values,"\n")
print("original_values的shape: ",original_values.shape)

显示结果:

original_values:  tensor([[[[ 0.8182, -1.2295],
          [ 0.1985,  1.2261],
          [-2.1763, -0.5790]]],
        [[[ 0.4204,  1.5903],
          [ 1.6354, -2.7076],
          [ 0.6119,  1.4595]]]]) 
original_values的shape:  torch.Size([2, 1, 3, 2])

2.进行左填充,pad=(1,0,0,0,0,0),在第四个维度填充

padding_values = F.pad(original_values, pad=(1,0,0,0,0,0), mode="constant",value=0)  
print("padding_values: ",padding_values,"\n")
print("padding_values的shape: ",padding_values.shape)

显示结果1(mode=“constant”):

在mode="constant"的padding_values:  tensor([[[[ 0.0000,  0.8182, -1.2295],
          [ 0.0000,  0.1985,  1.2261],
          [ 0.0000, -2.1763, -0.5790]]],
        [[[ 0.0000,  0.4204,  1.5903],
          [ 0.0000,  1.6354, -2.7076],
          [ 0.0000,  0.6119,  1.4595]]]]) 
padding_values的shape:  torch.Size([2, 1, 3, 3])

显示结果二2(mode=“reflect”):

在mode="reflect"的padding_values:  tensor([[[[-1.2295,  0.8182, -1.2295],
          [ 1.2261,  0.1985,  1.2261],
          [-0.5790, -2.1763, -0.5790]]],
        [[[ 1.5903,  0.4204,  1.5903],
          [-2.7076,  1.6354, -2.7076],
          [ 1.4595,  0.6119,  1.4595]]]]) 
padding_values的shape:  torch.Size([2, 1, 3, 3])

显示结果三(mode=“replicate”):

在mode="replicate"的padding_values:  tensor([[[[ 0.8182,  0.8182, -1.2295],
          [ 0.1985,  0.1985,  1.2261],
          [-2.1763, -2.1763, -0.5790]]],
        [[[ 0.4204,  0.4204,  1.5903],
          [ 1.6354,  1.6354, -2.7076],
          [ 0.6119,  0.6119,  1.4595]]]])
padding_values的shape:  torch.Size([2, 1, 3, 3])

3.进行左填充,pad=(2,0,0,0,0,0),在第四个维度填充

padding_values = F.pad(original_values, pad=(2,0,0,0,0,0), mode="constant",value=0)  
print("padding_values: ",padding_values,"\n")
print("padding_values的shape: ",padding_values.shape)

显示结果(mode=“constant”):

padding_values:  tensor([[[[ 0.0000,  0.0000,  0.8182, -1.2295],
          [ 0.0000,  0.0000,  0.1985,  1.2261],
          [ 0.0000,  0.0000, -2.1763, -0.5790]]],
        [[[ 0.0000,  0.0000,  0.4204,  1.5903],
          [ 0.0000,  0.0000,  1.6354, -2.7076],
          [ 0.0000,  0.0000,  0.6119,  1.4595]]]])
padding_values的shape:  torch.Size([2, 1, 3, 4])

4.进行右填充,pad=(0,1,0,0,0,0),在第四个维度填充

padding_values = F.pad(original_values, pad=(0,1,0,0,0,0), mode="constant",value=0)  
print("padding_values: ",padding_values)
print("padding_values的shape: ",padding_values.shape)

显示结果(mode=“constant”):

padding_values:  tensor([[[[ 0.8182, -1.2295,  0.0000],
          [ 0.1985,  1.2261,  0.0000],
          [-2.1763, -0.5790,  0.0000]]],
        [[[ 0.4204,  1.5903,  0.0000],
          [ 1.6354, -2.7076,  0.0000],
          [ 0.6119,  1.4595,  0.0000]]]])
padding_values的shape:  torch.Size([2, 1, 3, 3])

5.进行上填充,pad=(0,0,1,0,0,0),在第三个维度填充

padding_values = F.pad(original_values, pad=(0,0,1,0,0,0), mode="constant",value=0)  
print("padding_values: ",padding_values)
print("padding_values的shape: ",padding_values.shape)

显示结果(mode=“constant”):

padding_values:  tensor([[[[ 0.0000,  0.0000],
          [ 0.8182, -1.2295],
          [ 0.1985,  1.2261],
          [-2.1763, -0.5790]]],
        [[[ 0.0000,  0.0000],
          [ 0.4204,  1.5903],
          [ 1.6354, -2.7076],
          [ 0.6119,  1.4595]]]])
padding_values的shape:  torch.Size([2, 1, 4, 2])

6.进行下填充,pad=(0,0,0,1,0,0),在第三个维度填充

padding_values = F.pad(original_values, pad=(0,0,0,1,0,0), mode="constant",value=0)  
print("padding_values: ",padding_values)
print("padding_values的shape: ",padding_values.shape)

显示结果(mode=“constant”):

padding_values:  tensor([[[[ 0.8182, -1.2295],
          [ 0.1985,  1.2261],
          [-2.1763, -0.5790],
          [ 0.0000,  0.0000]]],
        [[[ 0.4204,  1.5903],
          [ 1.6354, -2.7076],
          [ 0.6119,  1.4595],
          [ 0.0000,  0.0000]]]])
padding_values的shape:  torch.Size([2, 1, 4, 2])

7.进行前填充,此时pad=(0,0,0,0,1,0),在第二个维度上填充

padding_values = F.pad(original_values, pad=(0,0,0,0,1,0), mode="constant",value=0)  
print("padding_values: ",padding_values)
print("padding_values的shape: ",padding_values.shape)

显示结果(mode=“constant”):

padding_values:  tensor([[[[ 0.0000,  0.0000],
          [ 0.0000,  0.0000],
          [ 0.0000,  0.0000]],
         [[ 0.8182, -1.2295],
          [ 0.1985,  1.2261],
          [-2.1763, -0.5790]]],
        [[[ 0.0000,  0.0000],
          [ 0.0000,  0.0000],
          [ 0.0000,  0.0000]],
         [[ 0.4204,  1.5903],
          [ 1.6354, -2.7076],
          [ 0.6119,  1.4595]]]])
padding_values的shape:  torch.Size([2, 2, 3, 2])

8.进行后填充,此时pad=(0,0,0,0,1,0),在第二个维度上填充

padding_values = F.pad(original_values, pad=(0,0,0,0,0,1), mode="constant",value=0)  
print("padding_values: ",padding_values)
print("padding_values的shape: ",padding_values.shape)

显示结果(mode=“constant”):

padding_values:  tensor([[[[ 0.8182, -1.2295],
          [ 0.1985,  1.2261],
          [-2.1763, -0.5790]],
         [[ 0.0000,  0.0000],
          [ 0.0000,  0.0000],
          [ 0.0000,  0.0000]]],
        [[[ 0.4204,  1.5903],
          [ 1.6354, -2.7076],
          [ 0.6119,  1.4595]],
         [[ 0.0000,  0.0000],
          [ 0.0000,  0.0000],
          [ 0.0000,  0.0000]]]])
padding_values的shape:  torch.Size([2, 2, 3, 2])
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐