本次主要是想把剩下的几个配置文件,以及对应的模型,给搞一下:
  1. gru.yaml
  2. mdtc.yaml
  3. mdtc_small.yaml
  4. tcn.yaml
因为之前用的是ds_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

哈。。。参数很少啊。。。每个卷积都很小。。。


这个错,是cmvn的锅。。。80维度vs. 40维度而已。需要重新生成一下global_cmvn并且设置维度为80即可。。。

mdtc_small.yaml

配置:


上面这个mfcc 80,也会导致刚才的bug出现,可以把80修改为40,凑合着用了。。。mfcc和fbank貌似不能混着用。。。

鉴于mfcc和fbank最好不要混合着用,可以取消cmvn的使用。。。

先到这里。待续。