Machine learning 理解LSTM体系结构中的密集层(标签和逻辑)

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

我正在研究这个笔记本-,我们使用嵌入层,LSTM和最后的密集层w/softmax来生成音乐

然而,对于我们如何计算损失,我有点困惑;据我所知,在本笔记本中(在compute_loss()中),在任何给定批次中,我们将预期标签(即注释本身)与logit(即来自密集层的预测)进行比较。然而,这些预测不应该是概率分布吗?我们什么时候才真正选择我们预测的标签


对我的问题再做一点澄清:如果标签的形状是(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()函数中,我们实际上在什么时候为每个时间步选择标签

它就在这个函数里面