序列的损失函数(在Tensorflow 2.0中)
我正在研究从英语到德语的句子翻译问题。 所以最终输出是一个德国序列,我需要检查我的预测有多好 我在tensorflow教程中发现了以下损失函数:序列的损失函数(在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
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