如何修改填充向量的seq2seq成本函数?

用户名

Tensorflow在构建RNN层时通过使用参数'sequence_length'支持动态长度序列,其中模型在序列大小='sequence_length'之后不学习序列,即返回零向量。

但是,如何修改https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/seq2seq.py#L890中的cost函数以遇到被屏蔽的序列,从而计算出cost和困惑度仅在实际序列上,而不是整个填充序列上?

def sequence_loss_by_example(logits, targets, weights, average_across_timesteps=True,  softmax_loss_function=None, name=None):

    if len(targets) != len(logits) or len(weights) != len(logits):
        raise ValueError("Lengths of logits, weights, and targets must be the same "
                         "%d, %d, %d." % (len(logits), len(weights), len(targets)))
      with ops.op_scope(logits + targets + weights, name,
                        "sequence_loss_by_example"):
        log_perp_list = []
        for logit, target, weight in zip(logits, targets, weights):
          if softmax_loss_function is None:
            # TODO(irving,ebrevdo): This reshape is needed because
            # sequence_loss_by_example is called with scalars sometimes, which
            # violates our general scalar strictness policy.
            target = array_ops.reshape(target, [-1])
            crossent = nn_ops.sparse_softmax_cross_entropy_with_logits(
                logit, target)
          else:
            crossent = softmax_loss_function(logit, target)
          log_perp_list.append(crossent * weight)
        log_perps = math_ops.add_n(log_perp_list)
        if average_across_timesteps:
          total_size = math_ops.add_n(weights)
          total_size += 1e-12  # Just to avoid division by 0 for all-0 weights.
          log_perps /= total_size
    return log_perps
阿维什卡·博普坎德(Avishkar Bhoopchand)

该功能已经支持通过使用权重来计算动态序列长度的成本。只要确保“填充目标”的权重为0,这些步骤的交叉熵将被推为0:

log_perp_list.append(crossent * weight)

并且总大小也将仅反映非填充步骤:

total_size = math_ops.add_n(weights)

如果使用零填充,则导出权重的一种方法如下:

weights = tf.sign(tf.abs(model.targets))

(请注意,您可能需要将此类型转换为与目标相同的类型)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Keras seq2seq模型如何在训练时从验证中屏蔽填充零?

来自分类Dev

如何运行张量流seq2seq演示

来自分类Dev

如何为seq2seq模型准备数据?

来自分类Dev

如何解码seq2seq的输出?

来自分类Dev

Tensorflow seq2seq多维回归

来自分类Dev

Tensorflow seq2seq多维回归

来自分类Dev

Tensorflow seq2seq 教程 404

来自分类Dev

在Tensorflow的seq2seq函数中使用预训练的词嵌入

来自分类Dev

如何将word2vec导入TensorFlow Seq2Seq模型?

来自分类Dev

如何使用张量流中的seq2seq预测简单序列?

来自分类Dev

如何使用张量流中的seq2seq预测简单序列?

来自分类Dev

如何为带有桶的seq2seq模型设置tfrecords队列?

来自分类Dev

Seq2Seq用于预测复杂状态

来自分类Dev

TensorFlow实现Seq2seq情感分析

来自分类Dev

训练seq2seq模型时出现InvalidArgumentError

来自分类Dev

为Seq2Seq模型添加关注层

来自分类Dev

Seq2Seq用于预测复杂状态

来自分类Dev

TensorFlow教程中的Seq2Seq桶的使用

来自分类Dev

张量流分配seq2seq永远卡住

来自分类Dev

我的 seq2seq RNN 想法是否可行?

来自分类Dev

如何使用tf2为seq2seq构建自定义双向编码器?

来自分类Dev

如何使用 tensorflow 函数 tf.contrib.legacy_seq2seq.sequence_loss_by_example 的“权重”参数?

来自分类Dev

使用张量流构建seq2seq模型时出错

来自分类Dev

seq2seq模型的张量图中未显示图visualisaton

来自分类Dev

用采样的解码器输出实现seq2seq

来自分类Dev

为什么在此seq2seq模型中添加输入?

来自分类Dev

以下Seq2Seq模型的预期训练时间是多少?

来自分类Dev

我在 tensoflow 存储库中找不到 seq2seq 模块

来自分类Dev

Tensorflow 中 Seq2Seq 的多层双向编码器

Related 相关文章

热门标签

归档