前言:
初学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 = \n',input)
#内部使用的weight
print('weight = \n',m.weight)
#内部使用的bias
print('bias = \n',m.bias)
#输出output
output = m(input)
print('output = \n',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的功能,可以去仔细分析其源代码。
参考: