请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于train_step中计算loss的问题

老师好, 在 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回答

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

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 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号