Tensorflow 中的生成序列

Posted

技术标签:

【中文标题】Tensorflow 中的生成序列【英文标题】:Generative sequences in Tensorflow 【发布时间】:2017-09-11 05:37:39 【问题描述】:

我使用以下代码来生成长度为num_steps 的序列,给定starting_pointstarting_state,使用RNNCell 的实例,例如cell=GRUCell(number_of_neurons)

outputs = [starting_point]
state = starting_state
for time_step in range(num_steps):
    if time_step > 0: tf.get_variable_scope().reuse_variables()
    (cell_output, state) = cell(outputs[time_step], state)
    outputs.append(cell_output)

但这对于我的用例(num_steps = 1000)来说既慢又麻烦。即使实例化图表也需要很长时间。

此功能是否存在于 Tensroflow 中的某个地方,而我只是错过了它?

请注意,我正在寻找的内容与tf.contrib.rnn.static_rnn 的行为相似但又不同。 documentation 将这个函数的行为总结为简单地将 RNN 应用于序列中的每个时间步:

state = cell.zero_state(...)
  outputs = []
  for input_ in inputs:
    output, state = cell(input_, state)
    outputs.append(output)
  return (outputs, state)

但就我而言,我想将一个步骤的输出作为下一步的输入。

【问题讨论】:

【参考方案1】:

在 tensorflow 每晚构建中,请参阅 tf.contrin.seq2seq 了解动态解码器对象。您可以使用预定的采样助手来做您想做的事情。或者使用 tf.nn.dynamic_rnn 并将所有零作为输入。 lstm h 状态也是 lstm 输出,因此您可以得到基本相同的行为。

【讨论】:

感谢您的回答 (+1)。我在 r1.1 中注意到了这些添加,但它们的用法完全不透明。例如,什么是解码器对象?什么是辅助对象?为什么我也需要?他们在做什么?现在我已经通过提供loop_fn=lambda prev, i: prev 来解决我想要使用legacyseq2seq.rnn_decode 的行为,但它仍然很慢。 我们正在编写教程。现在,请参阅单元测试以了解示例用法。 睡衣们稍微改变了 API,所以我建议使用这些。

以上是关于Tensorflow 中的生成序列的主要内容,如果未能解决你的问题,请参考以下文章

02.Tensorflow基础用法

tensorflow中的一些语法问题

TensorFlow文本摘要生成 - 基于注意力的序列到序列模型

TensorFlow文本摘要生成 - 基于注意力的序列到序列模型

TensorFlow文本摘要生成 - 基于注意力的序列到序列模型

图像分类任务中,Tensorflow 与 Keras 到底哪个更厉害?