赞
踩
在用transformer进行时序预测时,时常会纠结解码器的输入,如果采用现实值,那么在真实测试时该这么办呢
在训练时,解码器端的输入是通过教师强制(teacher forcing)机制来生成的。即,解码器端的输入是由真实的目标序列提供的,而不是由解码器自己生成的。这有助于加速模型的训练和提高模型的稳定性。
在测试阶段,解码器端的输入会根据模型先前生成的部分序列进行动态生成。即自回归生成。
在自回归生成中,模型将生成的序列部分用作下一个时间步的输入,逐步地生成整个序列。这就创建了一个类似于教师强制(teacher forcing)的机制,但不再是从真实目标序列中获取输入,而是从模型自身的生成中获取。
以下是在测试时使用自回归生成的简化示例:
def generate_sequence(model, start_sequence, max_length):
sequence = start_sequence
for _ in range(max_length):
# 预测下一个时间步的元素
next_element = model.predict(sequence)
# 将预测的元素添加到序列中
sequence = np.concatenate([sequence, next_element], axis=1)
return sequence
在这个简单的例子中,generate_sequence 函数通过模型预测下一个时间步的元素,并将其添加到序列中。这个过程可以迭代进行,生成整个序列。在实际应用中,可以根据具体情况对这个生成过程进行适当的调整。
需要注意的是,自回归生成可能会积累误差,并且在生成长序列时,模型可能会逐渐偏离真实数据分布。因此,在生成长序列时,要注意监测模型的输出并进行可能的调整。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。