Contents
代码:https://github.com/DURUII/Course-Voiceprint-Repo-1.0
时延神经网络(TDNNs)常用于声纹识别领域,例如著名的X-VECTOR基础结构就是TDNNs;它可以视作一维卷积神经网络1(1-d CNNs),甚至有人认为TDNNs是CNNs/LeNet-5的早期版本。
计算机视觉盛行的如今,数字图像处理中二维卷积(空域滤波/模版运算/互相关运算2)对于我们而言也不再陌生,无非就是中心数值等于按元素相乘后再相加嘛。
可是,到底如何理解一维卷积?它和二维卷积又有什么联系?
不妨通过实验,一探究竟。
单输入通道/单输出通道
预期结果
首先,我们暂时忽略通道。假定输入为 [ 1 , 2 , − 1 , 1 , − 3 ] [1, 2, -1, 1, -3] [1,2,−1,1,−3],核函数为 [ 1 , 0 , − 1 ] [1, 0, -1] [1,0,−1](卷积核是一维的,移动方向也自然是一维的),如果卷积核在输入向量上移动,请问结果是多少呢?可以看看我有没有算错。
顺带一提,这里输入是一行五列的矩阵。不过换一个角度,我们也可以认为每次输入的是3帧信息,并按照某种权重加和汇入1个新帧。
这里的3是卷积核尺寸( k e r n e l s i z e kernel\ size kernel size),从共享参数的全连接输入的角度说,3也是上下文所涵盖的范围, ( n − 1 , n + 1 ) o r { n − 1 , n , n + 1 } (n-1,n+1) \ or \ \{n-1, n, n+1\} (n−1,n+1) or { n−1,n,n+1}。
参考代码
# 输入
import torch.nn as nn
from torch.nn import Parameter
import torch.nn.functional as F
import torch
import numpy as np
import math
input = torch.tensor([
[[1, 2, -1, 1, -3], ]
], dtype=torch.float)
conv1d = nn.Conv1d(in_channels=1,
out_channels=1,
kernel_size=3,
stride=1,
padding=0,
dilation=1,
bias=Fa