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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容