interpolate是用于做插值处理的,常见用途是用于上采样(upsampling);当然也是可以做下采样的(downsampling)
下面做简单使用的介绍
size和scale_factor两个参数只需要提供一个即可;
他们的区别是,size指定了插值后的shape;而scale_factor只是提供一个系数去做倍增或者倍减;
mode主要是指插值的算法,默认是"nearest", 它类似repeat操作,即复制最近的一个元素来实现插值,但是它必须适用于输入的张量是4维的;
另外一个常见的值是“linear”,它是做线性插值
下面是简单使用的例子
scale_factor是指定最后两维的扩展系数,如下面scale_factor=(2,2),是做输入张量的shape的最后两维,分别乘以2;
import torch
from torch.nn import functional as F
x=torch.randint(1,10, (1, 3,2,2)).type(torch.float)
print(x)
x = F.interpolate(x, scale_factor=(2,2), mode='nearest')
print(x, x.shape)
如果scale_factor只输入一维是否可以? 可以的。
如下样例scale_factor=(2), 它其实效果就是scale_factor=(2,2)
import torch
from torch.nn import functional as F
x=torch.randint(1,10, (1, 3,2,2)).type(torch.float)
print(x)
x = F.interpolate(x, scale_factor=(2), mode='nearest')
print(x, x.shape)
不使用scale_factor,而使用size;
下面的例子里,通过size=(4,4),指定了输入张量的最后二维目标大小;实际上这个例子里,它的作用同上面的例子。
import torch
from torch.nn import functional as F
x=torch.randint(1,10, (1, 3,2,2)).type(torch.float)
print(x)
x = F.interpolate(x,size=(4,4), mode='nearest') print(x, x.shape)
使用mode=‘linear’; 注意输入张量需要为3维,然后插值仅作用于最后一维
import torch
from torch.nn import functional as F
x=torch.randint(1,10, (3,2,2)).type(torch.float)
print(x)
x = F.interpolate(x,size=4, mode='linear') #, scale_factor=(2)
print(x, x.shape)
使用scale_factor,效果同上
import torch
from torch.nn import functional as F
x=torch.randint(1,10, (3,2,2)).type(torch.float)
print(x)
x = F.interpolate(x,scale_factor=2, mode='linear')
print(x, x.shape)