前言:
初学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