PyTorch插值的定义
在深度学习中,我们有不同类型的功能给用户,其中插值是PyTorch提供的功能之一。通过使用插值,我们可以根据我们的要求来设置输入,而不同的使用的插值算法取决于不同的参数模式的设置。Interpolate支持一维、二维和三维云数据,如矢量数据、不同类型的图像JPG、PNG等。换句话说,我们可以说,插值适用于时间或体积维度。因此,根据我们的要求,我们可以通过使用一个比例因子来创建输出。
什么是PyTorch插值?
按照给定的尺寸或scale_factor边界来向下/向上示例信息。
它坚持当前测试信息的无常(1D,如矢量信息),空间(2D,如jpg,png,和其他图片信息),和体积(3D,如点云信息)类型的信息。信息信息的设计是minibatch x channels x [可选的深度] x [可选的高度] x width。对于一块无常的信息,预计三维张量的贡献,特别是minibatch x channels x width。对于空间信息,我们预计4D张量的贡献,特别是minibatch x channels x stature x width。对于体积信息,我们预计5D张量的贡献,例如,minibatch x channels x profundity x stature x width。该计算可用于三维(3D)和立方刚(3D)的计算。
如何使用PyTorch插值?
现在让我们来看看如何在PyTorch中使用插值函数,如下。
语法
torch.nn.functional.interpolate(specified input, o_size = None, scale_factor =None, mode_function ='nearest', align = None)
解释
在上面的语法中,我们使用不同参数的插值函数,如下所示。
- 指定的输入:指定的输入指的是输入张量。
- o_size: o_size表示张量的输出大小,取决于用户的要求。
- scale_factor:利用它来表示结果的输入频率。如果输入TUPLE,也要设置TUPLE类型。
- mode_function:用来指定样本,它取决于要求。
- align:在数学中,我们相信信息和结果的像素是正方形的,而不是几个焦点。因此,只要设置为 "真",信息和结果管就会按其尖锐像素的中间位置进行调整,以这种方式保持精确像素的质量。假设设置为 "假",信息管和结果管就会按其精确像素的突起部分进行调整,而插值则利用边界的极限值。当scale_factor保持不变时,使这个活动不受信息大小的影响。只利用使用线性、'双线'、'双线'或你可以利用'三线'时的计算。 默认设置为假。align = True时,直接引入的模式(直线、双线和三线)不调整结果和信息像素;因此,结果的价值可以依赖信息的大小。这是在适应0.3.1之前这些模式的默认行为。从那时起,默认行为是align = False。关于这如何影响结果的实质性模式,请参见向上样本。
PyTorch插值函数
对于PyTorch中的介绍,这个开放的问题要求更多的插值亮点。目前有一个nn.functional.grid_sample()的亮点;然而,基本上,一开始,这似乎并不是我想要的(然而我们以后会回到这个问题)。
具体来说,我需要拍摄一张图片,W x H x C,并在各种任意区域普遍测试。同样请注意,这和上采样不太一样,上采样是彻底的测试,而且不会给我们带来适应性的检测精度。
当scale_factor被指出时,在recompute_scale_factor=True的情况下,scale_factor被用来注册output_size,这将被用来诱导新的刻度的引入。默认的scale_factor在1.6.0中被改变。
插值1.1k的容量要求贡献在真正的BCHW设计中,而不是像过去那样的CHW。因此,用x = torch.rand(1, 2, 10, 10).cuda()取代过去,或者对x调用unsqueeze(0)工作,增加一个群组方面(因为它只是1张图片,它将是一个群组大小为1;然而,容量还需要它)
PyTorch插值线性
现在让我们来看看什么是线性插值,如下所示。
直接插值是一种策略,通过巧妙地定义两个附近的已知素质之间的直线边界,在已知素质之间找出中间的信息。插值是沿该线的任何一点。您可以利用直接加法,例如,绘制图表或关键帧之间的活力。
PyTorch插值的例子
现在让我们来看看插值的不同例子,以便更好地理解以下内容。
import torch
import torch.nn.functional as Fun
X = 2
Y = 4
Z = A = 8
B = torch.randn((X, Y, Z, A))
b_usample = Fun.interpolate(B, [Z*3, A*3], mode='bilinear', align_corners=True)
b_mod = B.clone()
b_mod[:, 0] *= 2000
b_mod_usample = Fun.interpolate(b_mod, [Z*3, A*3], mode='bilinear', align_corners=True)
print(torch.isclose(b_usample[:,0], b_mod_usample[:,0]).all())
print(torch.isclose(b_usample[:,1], b_mod_usample[:,1]).all())
print(torch.isclose(b_usample[:,2], b_mod_usample[:,2]).all())
print(torch.isclose(b_usample[:,3], b_mod_usample[:,3]).all())
解释
在上面的例子中,我们尝试在PyTorch中实现插值功能。在这里,首先我们创建了一个具有不同参数的随机张量,如上面的代码所示。之后,我们使用插值函数,如图所示。最后,我们通过下面的截图说明了上述实现的最终输出,如下图所示。
现在让我们来看看插值函数的另一个例子,如下。
import torch
import torch.nn.functional as Fun
A = torch.randn(6, 26, 151)
output = Fun.interpolate(A, size=150)
print(output.shape)
解释
在上面的例子中,我们首先导入所需的包;之后,我们使用randn()函数创建一个张量,如图所示。之后,我们使用interpolate()函数。最后,我们用下面的截图来说明上述实现的最终输出,如下图所示。
结语
我们希望通过这篇文章你能了解更多关于PyTorch插值的知识。从上面的文章中,我们已经掌握了PyTorch插值的基本思想,我们也看到了PyTorch插值的表现和例子。此外,我们从这篇文章中了解到如何以及何时使用PyTorch插值。