Tensorflow:以one-hot为参数的损失函数

Tensorflow: Loss function which takes one-hot as argument

我的 LSTM RNN 必须预测单个字母 (Y),给定前面的单词 (X)。 例如,如果 "Oh, say! can you see by the dawn's early ligh" 作为 X 给出,则 Y 将是 "t"(国歌的一部分)。每个 Alpabet 都是一次性编码的。因此,例如,one-hot 编码中的 g 是 [0,0,0,1,0,0,0,0,0,0,0,0,...,0,0,0,0,0 ,0].

dataX:[batch_size,20,num_of_classes], dataY:[batch_size,1,num_of_classes]

在这种情况下,哪种损失函数最适合预测? X 和 Y 都是 one-hot encoded,X 很多,Y 是一个。 我很少找到以 one-hot 为参数的损失函数(例如,logits 或 target 的参数)。

你要找的是

之间的交叉熵

Y_(基本事实)和Y(概率)

您可以使用基本的手写交叉熵,例如

y = tf.nn.softmax( logit_layer )
loss = -tf.reduce_mean(tf.reduce_mean( y_ * tf.log(y) ))

或者您可以使用内置的 TensorFlow 函数

loss = tf.nn.softmax_cross_entropy_with_logits( labels=y_, logits=logit_layer)

您的 Y 输出类似于 [0.01,0.02,0.01,.98,0.02,...] 而您的 logit_layer 只是应用 softmax 之前的原始输出。

这是我写的tutorial example,它使用手写交叉熵来猜测序列中的下一个项目,非常像猜测句子中的下一个字母。