2016-11-18 14 views
5

をintにテンソルの未知の次元のサイズを変換すると、我々はTensorflow。

私は例えば、私はさらに計算にそれを使用することができ Bは、このような変換することができますどのよう
a = tf.placeholder(tf.float32, shape=(None, 3072)) 
b = a.get_shape()[0] 

を持っていると仮定します与えられたテンソルTのために、私は新しいものを作成することができます、のようなSTH

newT = T/b 

答えて

7

あなたはグラフの操作を使用する必要があります。

a = tf.placeholder(tf.float32, shape=(None, 3072)) 
b = tf.shape(a)[0] 

戻り

<tf.Tensor 'strided_slice:0' shape=() dtype=int32> 

b = a.get_shape()[0]の 戻り

Dimension(None) 
-2

あなたの現在の方法は、既に動作します。私は、次のコードでそれを試み、それが正常に動作します:

x = [[1,2,3],[4,5,6], [7,8,9]] 
x = tf.constant(x) 
size = x.get_shape()[0] 
x /= size 

with googlelog.Capture(): 
    p_op = tf.Print(x, [x], "output: ", summarize=10) 
    sess.run(p_op) 

出力で:

output: [0 0 1 1 1 2 2 2 3] 
+1

あなたのxはあらかじめ指定された次元の大きさを持っているので、それは、私の場合ではありません。またテンソルではなくリストです –

+0

ああ、コピー&ペーストするのを忘れていましたが、インスタンシエーションの直後にx = tf.constant(x)という行があったのでテンソルのために働きました。しかし、あなたのプレースホルダーの問題に関して、あなたはあなたが持っている問題を詳しく説明できますか?実行時に形状が生成されると予想していたので、上記のように動作するはずです。 –

+1

ああ、私はあなたが何を打っているのか知っていると思う。 x.get_shape()[0](グラフ作成時)ではなく、tf.shape(x)[0](実行時に値を取得) –