Torch 有“pad Tensor”功能吗?
一种可能性是使用来自torch/nn 的nn.Padding 模块,例如:
require 'image'
require 'nn'
local x = image.lena()
local pad = 64
local pix = 0
local ndim = x:dim()
local s = nn.Sequential()
:add(nn.Padding(ndim-1, pad, ndim, pix))
:add(nn.Padding(ndim-1, -pad, ndim, pix))
:add(nn.Padding(ndim, pad, ndim, pix))
:add(nn.Padding(ndim, -pad, ndim, pix))
local y = s:forward(x)
image.display(y) -- this requires qlua
更新
可以看出implementation padding 是通过以下方式获得的:
- 分配预期大小的输出张量后填充填充填充颜色,
- 感谢
narrow,用原始值填充输入张量对应的区域。
玩具示例:
require 'torch'
local input = torch.zeros(2, 5)
local dim = 2 -- target dimension for padding
local pad = 3 -- amount of padding
local pix = 1 -- pixel value (color)
-- (1) compute the expected size post-padding, allocate a large enough tensor
-- and fill with expected color
local size = input:size()
size[dim] = size[dim] + pad
local output = input.new():resize(size):fill(pix)
-- (2) fill the original area with original values
local area = output:narrow(dim, 1, input:size(dim)):copy(input)
这给出了输出:
0 0 0 0 0 1 1 1
0 0 0 0 0 1 1 1
[torch.DoubleTensor of size 2x8]
对于特定的零填充,还有其他方便的可能性,例如: