我想自己实现 tf.nn.sparse_softmax_cross_entropy。但是经过一些批次后,损失变成了nan!
有我的代码:
logits_batch_size = tf.shape(logits)[0]
labels = tf.reshape(tgt_seq, [-1])
eps = tf.fill(tf.shape(logits), 1e-8)
logits = logits + eps
labels_1 = tf.expand_dims(labels, 1)
index = tf.expand_dims(tf.range(0, logits_batch_size), 1)
concated = tf.concat([index, labels_1], 1)
onehot_labels = tf.sparse_to_dense(concated, tf.stack([logits_batch_size, tvsize]), 1.0, 0.0)
y_log = tf.log(tf.nn.softmax(logits))
cost = tf.reduce_mean(-tf.reduce_sum(tf.multiply(onehot_labels, y_log), 0))
logits 与 tf.nn.sparse_softmax_cross_entropy 中的 logits 相同,这是一个二维张量,tgt_seq 也是一个二维张量。我的任务是一个序列到序列的学习任务。
谁能帮我?