0

テンソルフローのthisペーパーの実装を書こうとしています。私のプール層では、すべてを連結する必要があります。"ぎざぎざ"テンソルを連結する方法

pooled_outputs = [] 
    for i, filter_size in enumerate(filter_sizes): 
     with tf.name_scope("conv-maxpool-%s" % filter_size): 
      # Conv layer 
      filter_shape = [filter_size, embedding_size, 1, num_filters] 
      # W is the filter matrix 
      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") 

      # Max-pooling layer over the outputs 
      pooled = tf.nn.max_pool(
       h, 
       ksize=[1, sequence_lengths[i] - filter_size + 1, 1, 1], 
       strides=[1, 1, 1, 1], 
       padding="VALID", 
       name="pool" 
      ) 
      pooled_outputs.append(pooled) 

    # Combine all of the pooled features 
    num_filters_total = num_filters * len(filter_sizes) 

    print(pooled_outputs) 
    pooled_outputs = [tf.reshape(out, ["?", 94, 1, self.max_length]) for out in pooled_outputs] # The problem line 

    self.h_pool = tf.concat(3, pooled_outputs) 

私はこのコードを実行すると、それはpooled_outputsのためにこれをプリントアウト:

[<tf.Tensor 'conv-maxpool-3/pool:0' shape=(?, 94, 1, 128) dtype=float32>, <tf.Tensor 'conv-maxpool-4/pool:0' shape=(?, 51, 1, 128) dtype=float32>, <tf.Tensor 'conv-maxpool-5/pool:0' shape=(?, 237, 1, 128) dtype=float32>] 

私はもともとそこにpooled_outputs = [tf.reshape(out, ["?", 94, 1, self.max_length]) for out in pooled_outputs]行せずにこのコードを試してみましたが、私はこのエラーを得たこれは、私が使用するコードです:

:私はリシェイプラインに追加

ValueError: Dimension 1 in both shapes must be equal, but are 51 and 237 

、私はこのエラーを得ました

TypeError: Expected binary or unicode string, got 94 

私が知っている2番目のエラーは、 "?"新しいサイズでは、最初のエラーはテンソルが同じサイズではないためだと思います。 どうすればこれらのテンソルを正しくパッドすることができ、問題なく連結することができますか?

答えて

1

形状のコンポーネントの1つとして-1tf.reshapeメソッドに渡すことができます。それはあなたのテンソルの形から自動的に推測されるので、合計サイズは同じになります。

ので、詳細

ため documentationを参照してください

pooled_outputs = [tf.reshape(out, [-1, 94, 1, self.max_length]) for out in pooled_outputs] 

に問題のある行を変更してみてください

関連する問題