2021-03-19 Speech-Transformer项目参数设置3

替换recognize.py文件中cuda() --> cpu(),预测过程不需要调用GPU,虽然慢一点,但是在GPU紧张的时候也可以进行预测,将GPU资源尽量留给训练过程。

在预测过程中,可以加入report.py相关代码,即首先报告模型总参数情况。

    model.load_state_dict(net['state_dict'])
    num_params = 0
    for param in model.parameters():
        # print(param)
        print(param.size())
        num_params += param.numel()
    print(num_params / 1e6)
    # print(model.parameters())
    print(num_params)

    total_params = sum(x.data.nelement() for x in model.parameters())
    print('Args: {}'.format(args))
    print('Model total parameters: {}'.format(total_params))

输入权重的维度,encoder.linear_in.weight [256, 560] (其中256为d_model,560为 d_input * LFR_m,即80 x 7)
encoder模块w_qs权重维度,encoder.layer_stack.0.slf_attn.w_qs.weight[512, 256](其中512为d_k/d_v * n_head,即64 x 8)

新增 "--" 变量配置,在. utils/parse_options.sh || exit 1;这行命令之前定义一个变量并赋值。
此处不能用save-folder="",会报找不到对应目录的错误,可能这个变量已经被定义?
将 "-" 改为 "_",用save_folder=""即可。

然后在所有原有 {expdir}目录处,新增save_folder/目录。



这样即可在shell脚本选项配置中加入--save_folder,直接指定其他地方的模型结果绝对路径了。便于预测多种不同结果。

关于LFR_m、LFR_n参数的理解


上图中FRAME即为一帧,其为语音经过FBANK特征提取之后,mel滤波器为80个。
正常训练过程中,每次输入一帧数据进行处理,而当LFR_m = 5,即每次输入5帧数据进行处理;而当LFR_n = 4时,说明第二次输入的5帧数据在第一次输入的5帧数据基础上跳过4帧,即两次会有1帧数据重叠。
那么按照此理解推测:

  • LFR_m = 1; LFR_n = 1 与正常训练过程一致,每次输入一帧数据,每次输入数据无重叠

  • LFR_m = 2; LFR_n = 2 每次输入2帧数据, 每次输入数据无重叠

  • LFR_m = 1; LFR_n = 2 每次输入1帧数据,算上前一帧数据,跳过2帧数据,相当于漏掉一半帧

  • LFR_m = 7; LFR_n = 6 每次输入7帧数据,算上前一帧数据,跳过6帧数据,相当于每次重叠1帧

m = 1, n = 1
m = 2, n = 2
m = 1, n = 2

推荐阅读更多精彩内容