关于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回答
-
同学你好,你说的应该是这块代码:
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, ], 因为第二维我们只取了一个值而不是一个区间。
10
相似问题