Machine learning 理解LSTM体系结构中的密集层(标签和逻辑)
我正在研究这个笔记本-,我们使用嵌入层,LSTM和最后的密集层w/softmax来生成音乐 然而,对于我们如何计算损失,我有点困惑;据我所知,在本笔记本中(在compute_loss()中),在任何给定批次中,我们将预期标签(即注释本身)与logit(即来自密集层的预测)进行比较。然而,这些预测不应该是概率分布吗?我们什么时候才真正选择我们预测的标签Machine learning 理解LSTM体系结构中的密集层(标签和逻辑),machine-learning,deep-learning,lstm,recurrent-neural-network,Machine Learning,Deep Learning,Lstm,Recurrent Neural Network,我正在研究这个笔记本-,我们使用嵌入层,LSTM和最后的密集层w/softmax来生成音乐 然而,对于我们如何计算损失,我有点困惑;据我所知,在本笔记本中(在compute_loss()中),在任何给定批次中,我们将预期标签(即注释本身)与logit(即来自密集层的预测)进行比较。然而,这些预测不应该是概率分布吗?我们什么时候才真正选择我们预测的标签 对我的问题再做一点澄清:如果标签的形状是(batch_size,#of time steps),而Logit的形状是(batch_size,#of
对我的问题再做一点澄清:如果标签的形状是(batch_size,#of time steps),而Logit的形状是(batch_size,#of time steps,vocab_size),那么在compute_loss()函数中,我们实际上在什么时候为每个时间步选择标签 简而言之,Keras损失函数
sparse\u categorical\u crossentropy()
在LSTM模型的每个时间步中,损失函数中的顶层密集层和softmax函数共同生成模型词汇表的概率分布,在本例中,这些词汇表是音符。假设词汇表包含注释A、B、C、D。那么生成的一个可能的概率分布是:[0.01,0.70,0.28,0.01]
,这意味着模型对注释B(索引1)施加了大量概率,如下所示:
Label: A B C D
---- ---- ---- ---- ----
Index: 0 1 2 3
---- ---- ---- ---- ----
Prob: 0.01 0.70 0.28 0.01
假设真正的音符应该是C,它由数字2表示,因为它位于分发数组中的索引2处(索引从0开始)。要测量预测分布和真值分布之间的差异,请使用sparse\u categorical\u crossentropy()
函数生成一个表示损失的浮点数
有关更多信息,请访问。在该页面上,他们有以下示例:
y_true=[1,2]
y_pred=[[0.05,0.95,0],[0.1,0.8,0.1]]
loss=tf.keras.loss.sparse\u categorical\u交叉熵(y\u true,y\u pred)
您可以在该示例中看到,有一批两个实例。对于第一个实例,真实标签是1
,预测分布是[0.05,0.95,0]
,对于第二个实例,真实标签是2
,而预测分布是[0.1,0.8,0.1]
此功能用于第2.5节中的Jupyter笔记本:
为了在这个分类任务上训练我们的模型,我们可以使用一种形式的交叉熵损失(负对数似然损失)。具体来说,我们将使用稀疏的分类交叉熵损失,因为它利用整数目标进行分类任务。我们希望使用真实目标——标签——和预测目标——logits来计算损失
因此,要直接回答您的问题:
据我所知,在本笔记本中(在compute_loss()中),在任何给定批次中,我们将预期标签(即注释本身)与logit(即来自密集层的预测)进行比较
是的,你的理解是正确的
然而,这些预测不应该是概率分布吗
是的,他们是
我们什么时候才真正选择我们预测的标签
它是在sparse\u categorical\u crossentropy()函数中完成的。如果您的分布是[0.05,0.95,0]
,则这意味着该函数预测指数0的概率为0.05,指数1的概率为0.95,指数3的概率为0.0
对我的问题再做一点澄清:如果标签的形状是(batch_size,#of time steps),而Logit的形状是(batch_size,#of time steps,vocab_size),那么在compute_loss()函数中,我们实际上在什么时候为每个时间步选择标签
它就在这个函数里面