2017-07-29 1 views
0

私は次のコードTensorflowで形状を正しく取得して、再び形を変える方法は?

def f(x): 
    (_, H, W, C) = tf.shape(x) 
    x_reshaped = tf.reshape(x, (-1,C)) 
    res = x_reshaped/(H*W*C) 
    return res 

を実行しようとしています。しかし、ここでの問題は明らかに彼らはので、私は高度にH、Wを知らないということです?、?。したがって、変形と乗算は機能しません。今私の質問は、どのように正確に上記の計算を行うようにres正しいテンソルの流れですセッションで後で計算することができますか?

次は動作するはず

答えて

1

X = tf.placeholder(tf.float32, shape=[None, None, None, 40]) 

def f(x): 
    s = tf.shape(x) 
    x_reshaped = tf.reshape(x, [-1,s[3]]) 
    res = tf.div(x_reshaped, tf.cast((s[0]*s[1]*s[2]), tf.float32)) 
    return res 

out = f(X) 

sess = tf.Session() 
sess.run(out, {X:np.random.normal(size=(10,20,30,40))}) 
0

私はx内のすべてのアイテムが画像データを「フラット化」であることを意味している、あなたはxは、形状(batch_size, H*W*C)のようにしたいと仮定しています。その場合、正しいコードは次のようになります:

x_reshaped = tf.reshape(x, (-1, H*W*C)) 

しかし、あなたのコードをもっと見ることなく、私は確信が持てません。たとえば、ニューラルネットワークがコンボリューションとして設計されている場合は、まったく変わるのは間違いです

関連する問題