【问题标题】:variable size of input for CNN model in text classification?文本分类中 CNN 模型输入的可变大小?
【发布时间】:2018-05-11 01:54:48
【问题描述】:

我基于这个paper实现了文本分类的CNN模型。由于 CNN 只能处理固定大小的句子,所以我将输入的大小设置为数据集中句子的最大长度,并对短句进行零填充。但据我了解,无论输入句子有多长,max pooling 策略总是会为每个过滤器图只提取一个值。所以输入句子的大小无关紧要,因为经过过滤器卷积/池化后,输出将是相同的大小。在这种情况下,为什么要将所有短句补零成固定大小?

例如,我将数据输入CNN模型的代码是self.input_data = tf.placeholder(tf.int32,[None,max_len],name="input_data"),我可以不指定max_len,而使用基于当前训练句子长度的None value吗?

此外,我想知道是否有其他新方法可以解决 CNN 模型的可变输入。我还找到了另一个可以解决这个问题的paper,但据我了解,它只使用k值进行max-pooling而不是1值max-pooling,可以处理变量句吗?怎么样?

【问题讨论】:

  • 据我所知,我们使用max_len 来限制句子长度(或填充),因为批次中的训练数据必须具有相同的长度。也就是说,训练数据的形状是[batch_size, max_len]。我认为您不能为输入数据指定[none, none]

标签: tensorflow nlp convolution text-classification


【解决方案1】:

快速回答:

不可以

更长的答案:

池化就像一个 reduce 函数。将其应用到图层上会减小尺寸。但是不同的输入形状不会产生相同的输出形状。但是,使用零填充您可能可以模拟这一点,使用 max_len 我们正在这样做。因此,在第二篇论文中,想法是拥有一个动态计算图。这和以前不一样了。它基本上是创建几个具有不同深度的网络(取决于它们的输入大小)。编码器-解码器架构的通用版本称为bytenet

【讨论】:

  • 谢谢,这是我的错误,我认为池化是一个减少函数,最大池化只是找到输入中的最大值,所以输入应该具有相同的形状并不重要。对于第二篇论文,正如你所说,它创建了几个不同深度的网络,这些不同的模型共享相同的过滤器是真的吗?
  • 好吧,我不应该把它称为几个网络,它更像是用 seq2seq 对 NMT 进行分桶。您创建不同的计算图。所以是的,它们共享参数。我认为对于 CNN 来说,bytenet 是一个更好的实施方向。你可能也想看看wavenet:arxiv.org/pdf/1609.03499.pdf
猜你喜欢
  • 2023-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多