首页 > 解决方案 > 如何在tensorflow的model_with_buckets中使用sampled_softmax_loss函数?

问题描述

在tensorflow的model_with_buckets api函数中,有一个名为softmax_loss_function的参数,其签名为Function (labels, logits) -> loss-batch。

def model_with_buckets(
    encoder_inputs,
    decoder_inputs,
    targets,
    weights,
    buckets,
    seq2seq,
    softmax_loss_function=None,
    per_example_loss=False,
    name=None
)

分配 softmax_loss_function 的传统方法是使用类似 softmax_cross_entropy_with_logits 的任何东西:

def softmax_cross_entropy_with_logits(
    _sentinel=None,
    labels=None,
    logits=None,
    dim=-1,
    name=None
)

而 sampled_softmax_loss 函数具有以下定义:

def sampled_softmax_loss(weights,
                     biases,
                     labels,
                     inputs,
                     num_sampled,
                     num_classes,
                     num_true=1,
                     sampled_values=None,
                     remove_accidental_hits=True,
                     partition_strategy="mod",
                     name="sampled_softmax_loss"):

在关于将英语翻译成法语的官方 tensorflow seq2seq 示例中,它使用包装函数 sampled_loss 将 sampled_softmax_loss 分配给 model_with_bucket 参数,如下所示:

w = tf.get_variable("proj_w", [size, self.target_vocab_size], dtype=tf.float32)
w_t = tf.transpose(w)
b = tf.get_variable("proj_b", [self.target_vocab_size], dtype=tf.float32)
output_projection = (w, b)

# maybe need Function (labels, logits)
def sampled_loss(labels, inputs):
        labels = tf.reshape(labels, [-1, 1])
        return tf.nn.sampled_softmax_loss(w_t, b, inputs, labels, num_samples, self.target_vocab_size)

softmax_loss_function = sampled_loss

它对我有用。并且代码运行时出现很多错误。因为输入不等于logits。据我了解,logits = 输入 * 权重 + 偏差。那么,在 tensorflow 的 model_with_buckets 中使用 sampled_softmax_loss 函数的正确方法是什么?

标签: tensorflow

解决方案


推荐阅读