gpt4 book ai didi

deep-learning - CNTK:序列到序列处理的损失函数

转载 作者:行者123 更新时间:2023-12-04 21:34:41 30 4
gpt4 key购买 nike

我正在做一个音素对齐的序列到序列模型。具体来说,我的训练数据看起来像成对序列(音素 - 长度),其中音素是一个单热向量,长度是一个浮点数。
所以我想给模型输入一个音素序列并得到一个对应的长度序列。

我的网络通常是这样构建的:

model = Sequential(
EmbeddingLayer{embeddingSize} :
RecurrentLSTMLayerStack {lstmDims} :
LinearLayer{1}
)
LinearLayer{1}应该从 lstmDims 进行转换如果我做对了,则为 1。
因此,当我为模型提供长度为 N 的序列时,我也应该得到长度为 N 的结果序列。

现在我想设置一个合适的损失函数,我认为应该是已知结果序列的元素与模型输出之间的平均差异。平均应该通过时间轴完成,以便可以管理不同长度的序列。

我打算做类似的事情
objectives = Input(1) #actually a sequence here as stated in the reader
result = model(features)
errs = Abs(objectives - result)
loss_function = ReduceMean(errs)
criterionNodes = (loss_function)

但在 Reduction Operations它明确指出

These operations do not support reduction over sequences. Instead, you can achieve this with a recurrence.



我不确定如何为我的任务使用重复。而且我也不确定整个概念是否正确。

最佳答案

您需要两个不太复杂的重复(对于第二个,我们使用“内置”操作,其实现在 cntk.core.bs 文件中):

sum = errs + PastValue (0, sum, defaultHiddenActivation=0)
count = BS.Loop.Count(errs)
loss_function = sum / count

关于deep-learning - CNTK:序列到序列处理的损失函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41562909/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com