【问题标题】:Trainable weight for TensorFlow sequence_loss_by_example()TensorFlow sequence_loss_by_example() 的可训练权重
【发布时间】:2016-03-11 02:05:05
【问题描述】:

我想在seq2seq.sequence_loss_by_example() 中有一个可训练的体重,例如

w = tf.get_variable("w", [batch_size*num_steps])
loss = seq2seq.sequence_loss_by_example([logits_1],
            [tf.reshape(self._targets, [-1])],
            w,vocab_size_all)

但是,运行此代码会出现以下错误:

seq2seq.py, line 654, in sequence_loss_by_example
if len(targets) != len(logits) or len(weights) != len(logits):

根据seq2seq.py中该函数的文档字符串:

weights: list of 1D batch-sized float-Tensors of the same length as logits.

它需要一个“张量”,但我想传递一个tf.Variable。有没有办法在这个函数中有可训练的权重?

【问题讨论】:

标签: python tensorflow


【解决方案1】:

在 TensorFlow 中,tf.Variable 可用于任何需要 tf.Tensor(具有相同元素类型和形状)的地方。

因此,如果您想定义一个可训练的权重,您可以将tf.Variable 对象列表作为weights 参数传递给seq2seq.sequence_loss_by_example()。例如,您可以执行以下操作:

# Defines a list of `num_steps` variables, each 1-D with length `batch_size`.
weights = [tf.get_variable("w", [batch_size]) for _ in range(num_steps)]

loss = seq2seq.sequence_loss_by_example([logits_1, ..., logits_n],
                                        [targets_1, ..., targets_n],
                                        weights,
                                        vocab_size_all)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 2020-04-16
    相关资源
    最近更新 更多