序列的损失函数(在Tensorflow 2.0中)

序列的损失函数(在Tensorflow 2.0中),tensorflow,deep-learning,loss-function,Tensorflow,Deep Learning,Loss Function,我正在研究从英语到德语的句子翻译问题。 所以最终输出是一个德国序列,我需要检查我的预测有多好 我在tensorflow教程中发现了以下损失函数: loss_object = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True, reduction='none') def loss_function(real, pred): mask = tf.math.logical_not(tf.math.equal(real

我正在研究从英语到德语的句子翻译问题。 所以最终输出是一个德国序列,我需要检查我的预测有多好

我在tensorflow教程中发现了以下损失函数:

loss_object = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True, reduction='none')

def loss_function(real, pred):
    mask = tf.math.logical_not(tf.math.equal(real, 0))
    loss_ = loss_object(real, pred)

    mask = tf.cast(mask, dtype=loss_.dtype)
    loss_ *= mask

    return tf.reduce_mean(loss_)
但我不知道这个函数做什么。我知道(也许我错了)我们不能直接使用序列的SparseCategoricAlCross熵,我们必须做一些操作。 但在上面的代码中,我看到SparseCategoricalCrossentropy以简单的方式用于序列输出。为什么?

mask
变量的作用是什么? 你能解释一下代码吗


编辑:教程-

掩码=tf.math.logical\u not(tf.math.equal(real,0))
中的
掩码负责填充

因此,在你的一批人中,你会有不同长度的句子,你会用
0
填充使所有句子的长度相等(想想
我有一个苹果
v/s
这是在阳光下踢足球的好日子

但是,在损失计算中包含
0
填充部分是没有意义的-因此,它首先要研究
0
的指数,然后使用乘法将它们的损失贡献计算为0