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