2017-09-02 15 views
0

私はテキストの分類に畳み込みレイヤを実装しようとしていますが、これは私のニーズに合わせて変更しました。Tensorflowを使用して畳み込みレイヤを実装する

ブログには、畳み込みレイヤーが1つしかありませんが、ReLUとmax-poolingの後に2つの畳み込みレイヤーがあるようにしたいと思います。

コードは、これまでである:ここ

vocab_size = 2000 
embedding_size = 100 
filter_height = 5 
filter_width = embedding_size 
no_of_channels = 1 
no_of_filters = 256 
sequence_length = 50 
filter_size = 3 
no_of_classes = 26 


input_x = tf.placeholder(tf.int32, [None, sequence_length], name="input_x") 
input_y = tf.placeholder(tf.float32, [None, no_of_classes], name="input_y") 



# Defining the embedding layer: 

with tf.device('/cpu:0'), tf.name_scope("embedding"): 
    W = tf.Variable(tf.random_uniform([vocab_size, embedding_size], -1.0, 1.0), name="W") 
    embedded_chars = tf.nn.embedding_lookup(W, input_x) 
    embedded_chars_expanded = tf.expand_dims(embedded_chars, -1) 


# Convolution block: 

with tf.name_scope("convolution-block"): 
    filter_shape = [filter_height, embedding_size, no_of_channels, no_of_filters] 
    W = tf.Variable(tf.truncated_normal(filter_shape, stddev=0.1), name="W") 
    b = tf.Variable(tf.constant(0.1, shape=[no_of_filters]), name="b") 

    conv1 = tf.nn.conv2d(embedded_chars_expanded, 
        W, 
        strides = [1,1,1,1], 
        padding = "VALID", 
        name = "conv1") 

    conv2 = tf.nn.conv2d(conv1, 
        W, 
        strides = [1,1,1,1], 
        padding = "VALID", 
        name = "conv2") 

、Wは、フィルタ行列です。

ただし、これはエラーを与える:

ValueError: Dimensions must be equal, but are 256 and 1 for 'convolution-block_16/conv2' (op: 'Conv2D') with input shapes: [?,46,1,256], [5,100,1,256].

私は層の寸法に誤っている実感が、私はそれを修正することができませんか、正しい寸法に入れます。

誰かがガイダンス/ヘルプを提供できれば、本当に役に立ちます。

ありがとうございます。

答えて

1

コードの内容を理解できませんが、次のように変更すると問題が解決します。

with tf.name_scope("convolution-block"): 
    filter_shape = [filter_height, embedding_size, no_of_channels, no_of_channels #change the output channel as input#] 
    W = tf.Variable(tf.truncated_normal(filter_shape, stddev=0.1), name="W") 
    b = tf.Variable(tf.constant(0.1, shape=[no_of_filters]), name="b") 

    conv1 = tf.nn.conv2d(embedded_chars_expanded, 
        W, 
        strides = [1,1,1,1], 
        padding = "SAME", ##Change the padding scheme 
        name = "conv1") 

    conv2 = tf.nn.conv2d(conv1, 
        W, 
        strides = [1,1,1,1], 
        padding = "VALID", 
        name = "conv2") 
関連する問題