tensorflow - 如何在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 函数的正确方法是什么?
解决方案
推荐阅读
- hyperledger-fabric - 未提供连接类型,未定义“x-type”属性
- javascript - Javascript数组随机选择问题
- android - 即使在打瞌睡模式下也每 15 秒获取一次位置
- angular - 错误:没有 e 的提供者!带有 prod 标志(在本地服务器上工作正常) angular4
- jquery - 我如何能够将此 jQuery 代码转换为 React Native?
- javascript - 使用 Promise 渲染一个 Vue 应用程序,并等待用户输入
- java - 爪哇
主函数中的预期错误 - angular5 - 绑定 html 从 Angular 5 下拉
- python - 使用 BeautifulSoup 和 Requests 从 xml 文件打印数据
- arduino - 在 Arduino Uno 上的 2 个引脚之间传递信息