实验:torch.nn.conv1d 的功能验证

前言:

初学pytorch框架的童鞋们,想学习框架某些部分功能的,可以将实验数据复制到excel中,使用excel的计算功能,验证框架的功能。由于excel的计算过程公开透明,因此学习效果会更好。这里,我把验证conv1d模型功能的过程分享出来,期望给您带来抛砖引玉的效果。

python代码:

from torch import nn
import torch

m = nn.Conv1d(in_channels=5, out_channels=2, kernel_size=3, stride=1)

#输入input
input = torch.randn(5,3)
print('input = 
',input)

#内部使用的weight
print('weight = 
',m.weight)

#内部使用的bias
print('bias = 
',m.bias)

#输出output
output = m(input)
print('output = 
',output)

数据:

由于模型内部使用的是随机数据,每次运行数据都不同。因此我复制了一次实验数据,作为用于excel验证的数据。以下是上面程序的某一次的运行结果。

input = 
 tensor([[ 0.1499,  2.0607,  1.3089],
        [-1.5062, -0.5062,  1.6049],
        [-0.3534, -0.6020, -0.2613],
        [-0.7434,  0.2586,  0.9382],
        [ 0.2507, -1.8575, -0.2978]])

weight = 
 Parameter containing:
tensor([[[-0.2355, -0.0728,  0.1175],
         [ 0.0937,  0.0887, -0.0870],
         [ 0.1698, -0.0331,  0.0638],
         [ 0.1789,  0.1136,  0.1447],
         [-0.0598, -0.1492, -0.2430]],

        [[-0.0589,  0.2317,  0.2362],
         [-0.2013, -0.0025,  0.1743],
         [ 0.1544,  0.1707, -0.1816],
         [ 0.1680, -0.0570,  0.0875],
         [-0.0427, -0.0846, -0.0700]]], requires_grad=True)

bias = 
 Parameter containing:
tensor([-0.1759,  0.0532], requires_grad=True)


output = 
 tensor([[-0.2230],
        [ 1.4150]], grad_fn=<SqueezeBackward1>)

验证:

将上面程序中用的四份数据 input, weight, bias, output 复制到excel中,用于验证。使用excel计算input*weight+bias,获得一份output,我们标记为output(excel),我们把程序计算的output标记为output(torch)。最后的任务就是验证 output(excel) 和 output(torch) 是否相等。下面是excel计算过程的抓图。

excel的 sumproduct 函数,能够实现cross-correlation的功能,因此可以使用 sumproduct 函数计算验证数据。

结论:

实验结果表明两份output是相等的。由此我们也深刻明白了nn.conv1d的功能,以及它内部用到的数据结构。如果想更详细学习nn.conv1d的功能,可以去仔细分析其源代码。

参考:

Conv1d — PyTorch 2.1 documentation