将音素序列的隐藏状态表示为Hpho = [h1,h2,...,hn],其中n是序列的长度。将音素持续时间序列表示为D = [d1,d2,...,dn],其中di = m且m是 梅尔谱图序列。 我们将长度调节器LR表示为Hmel = LR(Hpho,D,α),(1) 其中,α是超参数,用于确定扩展序列Hmel的长度,从而控制语音速度。 例如,给定Hpho = [h1,h2,h3,h4],并且相应的音素持续时间序列D = [2、2、3、1],则基于等式1的扩展序列Hmel变为[h1,h1,h2,h2 ,h3,h3,h3,h4],如果α= 1(正常速度)。当α= 1.3(慢速)和0.5(快速)时,持续时间序列变为Dα= 1.3 = [2.6,2.6,3.9,1.3]≈ [3、3、4、1]和Dα= 0.5 = [1、1、1.5、0.5]≈[1、1、2、1],并且扩展后的序列变为 分别为[h1,h1,h1,h2,h2,h2,h3,h3,h3,h3,h4]和[h1,h2,h3,h3,h4]。
以上文字来自纸上的FastSpeech TTS模型。在这里,Hpho序列是3D张量[batch_size,text_length,word_dim],D序列是1D张量[N]。如何实现目标张量Hmel? Hmel也是3D张量[N,mel_length,word_dim]
答案 0 :(得分:0)
以下内容应该有效。但是请注意,这仅适用于一维张量。
a = tf.constant([2,3,1,4])
b=tf.constant([1,2,1,2])
res = tf.concat([tf.tile([aa], [bb]) for aa, bb in zip(tf.unstack(a), tf.unstack(b))], axis=0)
with tf.Session() as sess:
print(sess.run(res))