gru.yaml mdtc.yaml mdtc_small.yaml tcn.yaml

在三个模型之间“横跳“!
书接上回,目前是用ds_tcn搞了19个epoch:

换个模型玩玩~~
tcn.yaml
configs


tcn.yaml 配置文件截屏
模型:
KWSModel(
(global_cmvn): GlobalCMVN()
(preprocessing): LinearSubsampling1(
(out): Sequential(
(0): Linear(in_features=40,out_features=64,bias=True)
(1): ReLU()
)
(quant): QuantStub()
(dequant): DeQuantStub()
)
(backbone): TCN(
(network): ModuleList(
(0): CnnBlock(
(quant): QuantStub()
(dequant): DeQuantStub()
(cnn): Sequential(
(0): Conv1d(64, 64,kernel_size=(8,),stride=(1,))
(1): BatchNorm1d(64,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(2): ReLU()
(3): Dropout(p=0.1,inplace=False)
)
)
(1): CnnBlock(
(quant): QuantStub()
(dequant): DeQuantStub()
(cnn): Sequential(
(0): Conv1d(64, 64,kernel_size=(8,),stride=(1,),dilation=(2,))
(1): BatchNorm1d(64,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(2): ReLU()
(3): Dropout(p=0.1,inplace=False)
)
)
(2): CnnBlock(
(quant): QuantStub()
(dequant): DeQuantStub()
(cnn): Sequential(
(0): Conv1d(64, 64,kernel_size=(8,),stride=(1,),dilation=(4,))
(1): BatchNorm1d(64,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(2): ReLU()
(3): Dropout(p=0.1,inplace=False)
)
)
(3): CnnBlock(
(quant): QuantStub()
(dequant): DeQuantStub()
(cnn): Sequential(
(0): Conv1d(64, 64,kernel_size=(8,),stride=(1,),dilation=(8,))
(1): BatchNorm1d(64,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
(2): ReLU()
(3): Dropout(p=0.1,inplace=False)
)
)
)
)
(classifier): LinearClassifier(
(linear): Linear(in_features=64,out_features=2,bias=True)
(quant): QuantStub()
(dequant): DeQuantStub()
)
(activation): Sigmoid())目测,最重要的和ds_tcn.yaml的差别,如下:

可以看到,上面的内部hidden dimension = 64。
而ds_tcn.yaml里面更复杂一些:

除此之外,也没有啥特别牛叉的地方了。。。
甚至连膨胀系数dilation都是一毛一样的。。。
那就偷懒不看细节了。

大圣,我们不约!!!
tcn.yaml的参数规模:
the number of model params: 134,594
这任务也不复杂:

第0个epoch,就能acc 接近1.0...你这不是搞笑吗。。。尴尬了。
gru.yaml
莫非 是那个GRU???

gru.yaml配置文件

gru,果然就是torch.nn.GRU里面的那个感人的gru。。。是lstm的类似的rnn的架构。。。
这个过于简单的感觉。。。肯定够快了。
配置:

模型:

尴尬了,一共就一个双层gru。。。没啥搞头了。
the number of model params: 203650
参数规模也很小,自行脑补forward吧,肯定不会错的:
cmvn -》 preprocessing, (batch, seq.len, 40 to 128) -> gru -> (batch, seq.len, 128) -> classifier : 128 to 2 -> (batch, seq.len, 2) -> sigmoid。就得到结果了。

精度上升的也是很喜人!!!
mdtc.yaml

居然有个bug。。。
简单修改一下mdtc.yaml试试:
配置

增加 causal: true试试,ok
厉害了,这个模型够复杂的:
multi-scale depthwise temporal convolution(MDTC)
多刻度 逐深度 时序性 卷积。。。拉风的名字
模型
ipdb>nKWSModel(
(global_cmvn): GlobalCMVN()
(preprocessing): NoSubsampling()
(backbone): MDTC(
(preprocessor): TCNBlock(
(conv1): DSDilatedConv1d(
(conv): Conv1d(80,80, kernel_size=(5,), stride=(1,), groups=80)
(bn): BatchNorm1d(80, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pointwise): Conv1d(80,64, kernel_size=(1,), stride=(1,))
)
(bn1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu1): ReLU()
(conv2): Conv1d(64,64, kernel_size=(1,), stride=(1,))
(bn2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu2): ReLU()
)
(relu): ReLU()
(blocks): ModuleList(
(0): TCNStack(
(res_blocks): Sequential(
(0): TCNBlock(
(conv1): DSDilatedConv1d(
(conv): Conv1d(64,64, kernel_size=(5,), stride=(1,), groups=64)
(bn): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pointwise): Conv1d(64,64, kernel_size=(1,), stride=(1,))
)
(bn1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu1): ReLU()
(conv2): Conv1d(64,64, kernel_size=(1,), stride=(1,))
(bn2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu2): ReLU()
)
(1): TCNBlock(
(conv1): DSDilatedConv1d(
(conv): Conv1d(64,64, kernel_size=(5,), stride=(1,), dilation=(2,), groups=64)
(bn): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pointwise): Conv1d(64,64, kernel_size=(1,), stride=(1,))
)
(bn1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu1): ReLU()
(conv2): Conv1d(64,64, kernel_size=(1,), stride=(1,))
(bn2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu2): ReLU()
)
(2): TCNBlock(
(conv1): DSDilatedConv1d(
(conv): Conv1d(64,64, kernel_size=(5,), stride=(1,), dilation=(4,), groups=64)
(bn): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pointwise): Conv1d(64,64, kernel_size=(1,), stride=(1,))
)
(bn1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu1): ReLU()
(conv2): Conv1d(64,64, kernel_size=(1,), stride=(1,))
(bn2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu2): ReLU()
)
(3): TCNBlock(
(conv1): DSDilatedConv1d(
(conv): Conv1d(64,64, kernel_size=(5,), stride=(1,), dilation=(8,), groups=64)
(bn): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pointwise): Conv1d(64,64, kernel_size=(1,), stride=(1,))
)
(bn1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu1): ReLU()
(conv2): Conv1d(64,64, kernel_size=(1,), stride=(1,))
(bn2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu2): ReLU()
)
)
)
(1): TCNStack(
(res_blocks): Sequential(
(0): TCNBlock(
(conv1): DSDilatedConv1d(
(conv): Conv1d(64,64, kernel_size=(5,), stride=(1,), groups=64)
(bn): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pointwise): Conv1d(64,64, kernel_size=(1,), stride=(1,))
)
(bn1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu1): ReLU()
(conv2): Conv1d(64,64, kernel_size=(1,), stride=(1,))
(bn2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu2): ReLU()
)
(1): TCNBlock(
(conv1): DSDilatedConv1d(
(conv): Conv1d(64,64, kernel_size=(5,), stride=(1,), dilation=(2,), groups=64)
(bn): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pointwise): Conv1d(64,64, kernel_size=(1,), stride=(1,))
)
(bn1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu1): ReLU()
(conv2): Conv1d(64,64, kernel_size=(1,), stride=(1,))
(bn2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu2): ReLU()
)
(2): TCNBlock(
(conv1): DSDilatedConv1d(
(conv): Conv1d(64,64, kernel_size=(5,), stride=(1,), dilation=(4,), groups=64)
(bn): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pointwise): Conv1d(64,64, kernel_size=(1,), stride=(1,))
)
(bn1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu1): ReLU()
(conv2): Conv1d(64,64, kernel_size=(1,), stride=(1,))
(bn2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu2): ReLU()
)
(3): TCNBlock(
(conv1): DSDilatedConv1d(
(conv): Conv1d(64,64, kernel_size=(5,), stride=(1,), dilation=(8,), groups=64)
(bn): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pointwise): Conv1d(64,64, kernel_size=(1,), stride=(1,))
)
(bn1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu1): ReLU()
(conv2): Conv1d(64,64, kernel_size=(1,), stride=(1,))
(bn2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu2): ReLU()
)
)
)
(2): TCNStack(
(res_blocks): Sequential(
(0): TCNBlock(
(conv1): DSDilatedConv1d(
(conv): Conv1d(64,64, kernel_size=(5,), stride=(1,), groups=64)
(bn): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pointwise): Conv1d(64,64, kernel_size=(1,), stride=(1,))
)
(bn1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu1): ReLU()
(conv2): Conv1d(64,64, kernel_size=(1,), stride=(1,))
(bn2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu2): ReLU()
)
(1): TCNBlock(
(conv1): DSDilatedConv1d(
(conv): Conv1d(64,64, kernel_size=(5,), stride=(1,), dilation=(2,), groups=64)
(bn): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pointwise): Conv1d(64,64, kernel_size=(1,), stride=(1,))
)
(bn1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu1): ReLU()
(conv2): Conv1d(64,64, kernel_size=(1,), stride=(1,))
(bn2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu2): ReLU()
)
(2): TCNBlock(
(conv1): DSDilatedConv1d(
(conv): Conv1d(64,64, kernel_size=(5,), stride=(1,), dilation=(4,), groups=64)
(bn): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pointwise): Conv1d(64,64, kernel_size=(1,), stride=(1,))
)
(bn1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu1): ReLU()
(conv2): Conv1d(64,64, kernel_size=(1,), stride=(1,))
(bn2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu2): ReLU()
)
(3): TCNBlock(
(conv1): DSDilatedConv1d(
(conv): Conv1d(64,64, kernel_size=(5,), stride=(1,), dilation=(8,), groups=64)
(bn): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pointwise): Conv1d(64,64, kernel_size=(1,), stride=(1,))
)
(bn1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu1): ReLU()
(conv2): Conv1d(64,64, kernel_size=(1,), stride=(1,))
(bn2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu2): ReLU()
)
)
)
(3): TCNStack(
(res_blocks): Sequential(
(0): TCNBlock(
(conv1): DSDilatedConv1d(
(conv): Conv1d(64,64, kernel_size=(5,), stride=(1,), groups=64)
(bn): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pointwise): Conv1d(64,64, kernel_size=(1,), stride=(1,)))
(bn1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu1): ReLU()
(conv2): Conv1d(64,64, kernel_size=(1,), stride=(1,))
(bn2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu2): ReLU())
(1): TCNBlock(
(conv1): DSDilatedConv1d(
(conv): Conv1d(64,64, kernel_size=(5,), stride=(1,), dilation=(2,), groups=64)
(bn): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pointwise): Conv1d(64,64, kernel_size=(1,), stride=(1,)))
(bn1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu1): ReLU()
(conv2): Conv1d(64,64, kernel_size=(1,), stride=(1,))
(bn2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu2): ReLU()
)
(2): TCNBlock(
(conv1): DSDilatedConv1d(
(conv): Conv1d(64,64, kernel_size=(5,), stride=(1,), dilation=(4,), groups=64)
(bn): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pointwise): Conv1d(64,64, kernel_size=(1,), stride=(1,))
)
(bn1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu1): ReLU()
(conv2): Conv1d(64,64, kernel_size=(1,), stride=(1,))
(bn2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu2): ReLU()
)
(3): TCNBlock(
(conv1): DSDilatedConv1d(
(conv): Conv1d(64,64, kernel_size=(5,), stride=(1,), dilation=(8,), groups=64)
(bn): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pointwise): Conv1d(64,64, kernel_size=(1,), stride=(1,)))
(bn1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu1): ReLU()
(conv2): Conv1d(64,64, kernel_size=(1,), stride=(1,))
(bn2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu2): ReLU()
)
)
)
)
)
(classifier): LinearClassifier(
(linear): Linear(in_features=64, out_features=2, bias=True)
(quant): QuantStub()(dequant): DeQuantStub()
)
(activation): Sigmoid())这是四个TCNStack 模块,每个里面有四个TCNBlock模块【内部dilation = 1, 2, 4, 8,和之前的tcn等类似】。
感叹,卷积真多。。。
the number of model params: 155,778
哈。。。参数很少啊。。。每个卷积都很小。。。

mdtc_small.yaml
配置:

鉴于mfcc和fbank最好不要混合着用,可以取消cmvn的使用。。。
先到这里。待续。
