2017-01-18 32 views
0

我试图理解的是如何创建一个用于自然语言处理(NLP)的卷积神经网络。要启动的,我使用的是标准的体系结构,其中一个过滤器F滑过输入矩阵S以便创建一个卷积滤波器地图:为什么conv2d输出(?,6,1,1)而不是(?,5,1,1)

enter image description here

下面的代码应该执行卷积步骤,但我不太了解输出尺寸。请不要从图像中混淆。在我的代码是词的嵌入单词与图像形成对比,其中单词嵌入是列。

filter_shape = [ 
    context_window_size, 
    word_embedding_size, 
    1, 
    num_filters 
] # filter_shape: [5, 300, 1, 1] 

F = tf.Variable(
    tf.truncated_normal(filter_shape, stddev=0.1), name="F") 
b = tf.Variable(
    tf.constant(1.0, shape=[num_filters], name="b")) # b: (1,) 

conv = tf.nn.conv2d(  
    input_S,    # input_S: (?, 10, 300, 1) 
    F,     # F: (5, 300, 1, 1) 
    strides=[1, 1, 1, 1], 
    padding="VALID", 
    name="conv" 
) # conv: (?, 6, 1, 1) 

h = tf.nn.relu(tf.nn.bias_add(conv, b), name="relu") # h: (?, 6, 1, 1) 

我期望用于滑过[10x300]输入矩阵,其中10是字矢量和300各自的尺寸的数量的大小的[5x300]滤波器F什么,是[5x1]卷积特征向量。如果滤波器被放置在输入矩阵的“开始”处,并且一次一步地滑过它,则滤波器只能进行5步而不超过输入矩阵。

正如您从代码中的注释中所看到的,我得到了一个卷积特征向量[6x1]。因此,我很确定我误解了这里发生的事情。

为什么conv尺寸为(?, 6, 1, 1)而不是(?, 5, 1, 1)

回答

0

如果你写的连续间隔的所有组合(索引从0开始),你会得到6情况:

[0,4], [1,5], [2,6], [3,7], [4,8], [5,9]

相关问题