2017-07-06 8 views
-1

私は次の行列持っている:私は1行によって無パディングとスライドとの畳み込みを行う場合、私は以下を取得する必要があります1×2カーネルの2×2行列で畳み込みを行うテンソルフローを取得するにはどうすればよいですか?

と、次のカーネルを答え:

ので:tf.nn.conv2dのドキュメントをベースに

、私はこのコードは、私はちょうど、上記のものを表して考えた:

import tensorflow as tf 

input_batch = tf.constant([ 
    [ 
     [[.0], [1.0]], 
     [[2.], [3.]] 
    ] 
]) 

kernel = tf.constant([ 
    [ 
     [[1.0, 2.0]] 
    ] 
]) 

conv2d = tf.nn.conv2d(input_batch, kernel, strides=[1, 1, 1, 1], padding='VALID') 
sess = tf.Session() 

print(sess.run(conv2d)) 

しかし、それは、この出力生成:

[[[[ 0. 0.] 
    [ 1. 2.]] 

    [[ 2. 4.] 
    [ 3. 6.]]]] 

そして、私はそれがどのように計算されるのかわかりません。私はストライドパディングパラメータの異なる値を試してみましたが、期待した結果を生み出すことができません。

答えて

1

リンクしたチュートリアルで私の説明を正しく読み込んでいません。 no-padding, strides=1の単純な変更の後、次のコードを取得すると仮定します。

import tensorflow as tf 
k = tf.constant([ 
    [1, 2], 
], dtype=tf.float32, name='k') 
i = tf.constant([ 
    [0, 1], 
    [2, 3], 
], dtype=tf.float32, name='i') 
kernel = tf.reshape(k, [1, 2, 1, 1], name='kernel') 
image = tf.reshape(i, [1, 2, 2, 1], name='image') 

res = tf.squeeze(tf.nn.conv2d(image, kernel, [1, 1, 1, 1], "VALID")) 
# VALID means no padding 
with tf.Session() as sess: 
    print sess.run(res) 

これは、あなたが期待した結果をもたらします:[2., 8.]です。ここでは、スクイーズ演算子のために、列の代わりにベクトルがあります。私はあなたのコードを見


一つの問題(他があるかもしれませんが)あなたのカーネルが形状(1, 1, 1, 2)であるということですが、それは(1, 2, 1, 1)すると仮定します。

関連する問題