2017-01-18 11 views
0

私は自然言語処理(NLP)のために畳み込みニューラルネットワークを作成する方法を理解しようとしています。私は畳み込みフィルタマップを作成するために入力行列SオーバーフィルタFスライドは標準アーキテクチャ使用しているの開始:(?、5、1、1)の代わりにconv2dの出力(?、5,1,1)の代わりに

enter image description here

以下のコードは、畳み込みステップを実施することになっているが、しかし私は出力の寸法をあまり理解していません。イメージから混乱しないようにしてください。私のコードでは、の行は、画像とは対照的に単語の単語埋め込みであり、単語埋め込みは列です。 I 10はワードベクトル及び300それぞれの次元の数である[10x300]入力行列、上をスライド[5x300]サイズのフィルタFため期待

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) 

[5x1]畳み込み特徴ベクトルです。フィルタが入力行列の「開始時」に配置され、一度に1段階上に並んでいる場合、フィルタは入力行列を超えないで5ステップしか作成できません。

コード内のコメントからわかるように、私は[6x1]畳み込み特徴ベクトルを得ています。そのため、私はここで何が起こっているのか誤解していると確信しています。

なぜconvのサイズが(?, 6, 1, 1)で、(?, 5, 1, 1)ではないのですか?あなたは(0からインデックス)の連続した区間の全ての組み合わせを記述する場合

答えて

0

、あなたは6例を取得します:

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

関連する問題