我正在复习丹尼·布里茨的
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]
这意味着我想在每个过滤器的一个通道上一次移动一个完整的单词。