2017-11-22 8 views
0

最大プールされた畳み込みレイヤー出力にドロップアウトを適用した後に稠密レイヤーを追加しようとしています。テンソルフローの高密度レイヤーで寸法誤差が発生しました

私は以下のテンソルフローコードをPythonで書いています。フィルタの数は128であり、len(filter_sizes)は3です。

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") 

      # Applying batch normalization 
      # h = tf.contrib.layers.batch_norm(conv, center=True, scale=True, is_training=True) 

      # Apply nonlinearity 
      h1 = tf.nn.relu(tf.nn.bias_add(conv, b), name="relu") 

      # Maxpooling over the outputs 
      pooled = tf.nn.max_pool(
       h1, 
       ksize=[1, sequence_length - filter_size + 1, 1, 1], 
       strides=[1, 1, 1, 1], 
       padding='VALID', 
       name="pool") 
      pooled_outputs.append(pooled) 

    # Combine all the pooled features 
    num_filters_total = num_filters * len(filter_sizes) 
    self.h_pool = tf.concat(pooled_outputs, 3) 
    self.h_pool_flat = tf.reshape(self.h_pool, [-1, num_filters_total]) 

    # Add dropout 
    with tf.name_scope("dropout"): 
     #self.h_drop = tf.nn.dropout(dense, self.dropout_keep_prob) 
     self.h_drop = tf.nn.dropout(self.h_pool_flat, self.dropout_keep_prob) 

     # Adding dense layer 
    dense = tf.layers.dense(self.h_drop, units=num_classes, activation=tf.nn.relu) 

高密度レイヤの適用後の問題に直面しています。続き

は誤りです:

Dimensions must be equal, but are 11 and 384 for 'output/scores/MatMul' (op: 'MatMul') with input shapes: [?,11], [384,11] 

誰かがそれで私を助けていただけますか?

答えて

0

エラーは行列の指数であった。私はtensorflowによって提供されたxw_plus_b関数を使用していましたが、行列の次元を使って乗算を誤っていました。

関連する問題