关于train_step中计算loss的问题

来源:10-8 模型训练

慕姐1371489

2020-05-30

老师好, 在 train_step 中的计算loss步骤,也就是下面这一步
loss += loss_funtion(targ[:, t+1],predictions)

prediction的shape 是 [batch_size,vocab_size]
而targ[:,t+1]的shape是[batch_size,time_step]
这两者之间shape不一样,不需要加全连接层就可以计算的嘛,
还是我理解有误,望得到老师指导,谢谢

写回答

1回答

正十七

2020-05-31

同学你好,你说的应该是这块代码:

optimizer = keras.optimizers.Adam()
loss_object = 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_)

这里的损失计算,我们使用的是SparseCategoricalCrossentropy。这个函数接收概率分布和真实类别作为输入计算loss。https://www.tensorflow.org/api_docs/python/tf/keras/losses/SparseCategoricalCrossentropy

然后prediction的shape确实是 [batch_size,vocab_size],不过targ[:, t+1]的shape是[batch_size, ], 因为第二维我们只取了一个值而不是一个区间。

1
0

Google老师亲授 TensorFlow2.0 入门到进阶

Tensorflow2.0实战—以实战促理论的方式学习深度学习

1849 学习 · 896 问题

查看课程