Tensorflow:损失函数,以一热为参数

时间:2017-06-17 17:01:30

标签: tensorflow lstm

我的LSTM RNN必须预测单个字母(Y),给出(X)之前的前一个单词。 例如,如果“哦,说!你能看到黎明的早期光线”是X,那么Y就是“t”(国歌的一部分)。每个Alpabets都是单热编码的。因此,g-one-hot编码就是例如,[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都是单热编码,X是多,Y是一。 我很少找到以一热为参数的损失函数(例如,logits或target的参数)。

1 个答案:

答案 0 :(得分:1)

您正在寻找的是

之间的交叉熵

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,它使用手工编码的交叉熵来猜测序列中的下一个项目,非常像猜测句子中的下一个字母。