Closed yt605155624 closed 2 years ago
关注点1:paddle 里面没有 pack_padded_sequence 和 pad_packed_sequence, 所以在调用 lstm 等模型时(tacotron2 的 encoder)需要输入 sequence_length,参考:https://www.paddlepaddle.org.cn/documentation/docs/zh/faq/train_cn.html#paddletorch-nn-utils-rnn-pack-padded-sequencetorch-nn-utils-rnn-pad-packed-sequenceapi transformer tts 的 EncoderPrenet 也用到了 tacotron2 的 encoder,之前没有输入 sequence_length,之后需要看看是否需要重新训练 关注点2:增加全局初始化会明显加快收敛速度
训练会有周期震荡,但是训练集已经 shuffle 过了,而且震荡周期不是 1 epoch,所以应该不是因为数据集没 shuffle 引起的震荡 震荡周期是 2448 iter, bs 是 64, 算下来是 16 个 epoch 一次震荡,可能是因为 shuffle 算法的周期是 16 个 EPOCH 2448*64/9800 ~=16
关注点2:增加全局初始化会明显加快收敛速度
全局初始化指的是什么?
数据预处理使用的标注是什么呢? 目前 fastspeech2 使用的是 MFA, transformer_tts (ljspeech) 的是 paddlespeech 的英文文本前端模块 在设计 Tacotron2 预处理时,决定还是使用 MFA 而不是 paddlespeech 的中文文本前端,因为 MFA 使用了 csmsc 本身提供的拼音和 paddlespeech 的 simple.lexicon, 我们直观认为 csmsc 的标注优于 paddlespeech 的文本前端(csmsc 人工标注了变调等,而 paddlespeech 的文本前端的变调是基于规则的,可能没有人工标注好),使用 paddlespeech 的中文文本前端可能引入额外的错误,而且在训练 fastspeech2 时,我们已经有了 csmsc 上的 MFA 结果了,直接拿来用就好(仅使用标注结果,不使用 duration) 数据预处理过程应该与 fastspeech2 类似,只是不需要 duration、energy 和 pitch 等