代码之家  ›  专栏  ›  技术社区  ›  Brian

TensorFlow-理解CNN文本分类的过滤器和步幅形状

  •  0
  • Brian  · 技术社区  · 7 年前

    我正在复习丹尼·布里茨的 tutorial 在…上 文本 分类使用 CNNs 在里面 TensorFlow . 滤镜和步幅形状在图像域中非常有意义。然而,当谈到文本时,我对如何正确定义步幅和过滤形状感到困惑。考虑Denny代码中的以下两层:

    # Create a convolution + maxpool layer for each filter size
    pooled_outputs = []
    for i, filter_size in enumerate(filter_sizes):
        with tf.name_scope("conv-maxpool-%s" % filter_size):
            # Convolution Layer
            filter_shape = [filter_size, embedding_size, 1, num_filters]
            W = tf.Variable(tf.truncated_normal(filter_shape, stddev=0.1), name="W")
            b = tf.Variable(tf.constant(0.1, shape=[num_filters]), name="b")
            conv = tf.nn.conv2d(
                self.embedded_chars_expanded,
                    W,
                    strides=[1, 1, 1, 1],
                    padding="VALID",
                    name="conv")
            # Apply nonlinearity
            h = tf.nn.relu(tf.nn.bias_add(conv, b), name="relu")
            # Maxpooling over the outputs
            pooled = tf.nn.max_pool(
                h,
                ksize=[1, sequence_length - filter_size + 1, 1, 1],
                strides=[1, 1, 1, 1],
                padding='VALID',
                name="pool")
            pooled_outputs.append(pooled)
    

    形状 self.embedded_chars_expanded [batch_size, max_sentence_length, embedding_size, 1] 这意味着每个批次成员都是 max_sentence_length x embedding_size

    过滤器

    假设我的filter\u形状是 [3, 50, 1, 16] . 我将其解释为过滤器将滑过 3 具有维度的时间的词向量 50 . 这是文本,所以 1 对应于单个输入通道(与 具有 RGB 16 暗示我会 16 conv layer .

    我是否正确解释了这一点?

    类似地,conv层和pooling层中的步幅形状定义为 [1, 1, 1, 1] .

    filter_shape ?

    如果是这样,这就是为什么我感到困惑。文字向量表示的性质似乎意味着步长应该是 [1, embedding_size, 1, 1] 这意味着我想在每个过滤器的一个通道上一次移动一个完整的单词。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Community Alok Save    4 年前

    过滤器

    我是否正确解释了这一点?

    跨步

    该形状的尺寸是否与 filter\u形状?

    是的,它对应于在输入嵌入上卷积滤波器的步长。

    似乎文字向量表示的性质 意思是我想在一个单词上一次移动一个完整的窗口

    注意填充策略-填充 conv2d VALID

    换言之,你只能沿着嵌入维度卷积一次,与步幅无关。