当前位置: 首页 > 面试题库 >

如何在TensorFlow中处理具有可变长度序列的批处理?

吕鸿文
2023-03-14
问题内容

我试图使用RNN(特别是LSTM)进行序列预测。但是,我遇到了序列长度可变的问题。例如,

sent_1 = "I am flying to Dubain"
sent_2 = "I was traveling from US to Dubai"

我正在尝试使用一个基于此基准的简单RNN预测当前单词之后的下一个单词,以构建PTB
LSTM模型

但是,该num_steps参数(用于展开到先前的隐藏状态)在每个Tensorflow的时期应保持相同。基本上,批处理句子是不可能的,因为句子的长度会有所不同。

 # inputs = [tf.squeeze(input_, [1])
 #           for input_ in tf.split(1, num_steps, inputs)]
 # outputs, states = rnn.rnn(cell, inputs, initial_state=self._initial_state)

在这里,num_steps对于我来说,每个句子都需要更改。我已经尝试了几种方法,但是似乎没有任何效果。


问题答案:

您可以使用以下介绍的存储分区和填充思想:

序列到序列模型

同样,创建RNN网络的rnn函数接受参数 sequence_length。

例如,您可以创建相同大小的句子存储桶,将它们填充必要的零,或使用占位符表示零个单词,然后将它们与seq_length =
len(zero_words)一起提供。

seq_length = tf.placeholder(tf.int32)
outputs, states = rnn.rnn(cell, inputs, initial_state=initial_state, sequence_length=seq_length)

sess = tf.Session()
feed = {
    seq_length: 20,
    #other feeds
}
sess.run(outputs, feed_dict=feed)

还要看一下这个reddit线程:

具有``可变长度’‘序列的Tensorflow基本RNN示例



 类似资料:
  • 本文向大家介绍pytorch对可变长度序列的处理方法详解,包括了pytorch对可变长度序列的处理方法详解的使用技巧和注意事项,需要的朋友参考一下 主要是用函数torch.nn.utils.rnn.PackedSequence()和torch.nn.utils.rnn.pack_padded_sequence()以及torch.nn.utils.rnn.pad_packed_sequence()来

  • 我试图读取一个csv文件,并将其设置为转换为另一种格式,以节省一些工作时间,但当一行的长度小于预期列时,我正在加载它的JTable会引发异常。如果行长度<列长度,是否有方法创建空单元格? 因此,您可以看到getValueAt(int row,int col)方法,如果col超过String[].length将导致错误。

  • 如何在批处理模式的情况下处理反序列化异常? 我正在使用Spring boot-2.3.8版本的Spring kafka。 尝试过此选项: 但它抛出了一个异常:由java引起。lang.IllegalStateException:错误处理程序必须是ErrorHandler,而不是org。springframework。Kafka。听众。请参阅OcuCurrentBatchErrorHandler 以

  • 主要内容:命令行参数,set命令,使用数字值,局部与全局变量,使用环境变量批处理文件中有两种类型的变量。 其中一个参数是在调用批处理文件时可以传递的参数,另一个是通过命令完成的。 命令行参数 批处理脚本支持命令行参数的概念,其中参数可以在被调用时传递给批处理文件。参数可以通过变量,,等从批处理文件中调用。 以下示例显示了一个批处理文件,它接受3个命令行参数,并将它们回显到命令行屏幕。 如果上面的批处理脚本存储在一个名为的文件中,我们将运行该批处理 - 以下是批处理文件执

  • 问题内容: 我有一些以表示的数据。它是一个未知大小的张量(应分批输入),每个项目的大小都为。经历,所以现在有尺寸,其中是嵌入尺寸并指未知的批量大小。 此处描述: 我现在正尝试将输入数据中的每个样本(现在通过嵌入维度进行扩展)乘以矩阵变量,而我似乎不知道该怎么做。 我首先尝试使用,但是由于形状不匹配而导致错误。然后,我通过扩展的维度和应用来尝试以下操作(我还尝试了从进行的功能,结果相同): 这将通过

  • 我有一个巨大的LPF(长度前缀文件)要由Hadoop处理。 但是,似乎没有合适的InputFormat可以随时读取各个记录,因为没有分隔符来分隔各个记录或列。 输入拆分必须发生在其中一条记录的末尾,这样在其他块中就没有半条记录。否则,记录读取器必须知道一半记录的结尾,以便将其与另一半记录连接起来。请建议一些读取和处理LPF文件的方法