2016-05-07 4 views
32

に間違った形状を得ますテンソル( "形状:0"、形状=(1)、dtype = int32)、出力の結果が形状にならない理由=(100)tf.shape()私はこのようなテンソルを定義tensorflow

+0

私はそれを受け入れるものではないにも関わらず、[この(https://stackoverflow.com/a/41771268/1358091)は、テンソルの形状を分析するのに非常に有用で答えが見つかりました。 –

答えて

73

tf.shape(input, name=None)は、入力の形状を表す1次元の整数テンソルを返します。

x.get_shape()xの変数を返します。

+15

'x.get_shape()。as_list()'は、シェイプを標準のPythonリストに変換するためによく使われる形式です。参照のためにここに追加されました。 –

9

明確化:

tf.shape(x)はオペアンプを作成し、現在印刷しているものであるように構築オペアンプの出力、の略でオブジェクトを返します。形状を取得するには、セッション内で操作を実行します。

matA = tf.constant([[7, 8], [9, 10]]) 
shapeOp = tf.shape(matA) 
print(shapeOp) #Tensor("Shape:0", shape=(2,), dtype=int32) 
with tf.Session() as sess: 
    print(sess.run(shapeOp)) #[2 2] 

クレジット:上記の解答を見た後、私はより多くの役に立ったと私はここでそれを言い換え試してみましたtf.rank function in Tensorflowへの回答を見ました。

2

同様の問題はうまくTF FAQに説明する:

TensorFlowにおいて、テンソル静的(推測)形状と 動的(真)形状の両方を有しています。静的形状は、 tf.Tensor.get_shapeメソッドを使用して読み取ることができます。この形状は、テンソルの作成に使用された操作 から推測され、部分的に完了することがあります。 静的形状が完全に定義されていない場合、tf.shape(t)を評価することによって、Tensor t の動的形状を決定できます。

のでtf.shape()戻りますテンソルは、常にshape=(N,)の大きさを持つことになります、とのセッションで計算することができます。一方

a = tf.Variable(tf.zeros(shape=(2, 3, 4))) 
with tf.Session() as sess: 
    print sess.run(tf.shape(a)) 

をあなたはx.get_shape().as_list()を使用して、静的な形状を抽出することができますし、これはどこでも計算できます。

+0

'shape =(N、)'とは何ですか?静的形状とダイナミック形状が異なる場合の例を表示できますか? – mrgloom

+0

@mrgloom shape =(n、)はサイズnのベクトルを表します。このような例を示すのは容易ではありません。なぜなら、TFを混乱させて形の制御を失う必要があるからです。 –

3

@Salvador Daliの回答に基づく簡単な例です。

a = tf.Variable(tf.zeros(shape=(2, 3, 4))) 
print("a v1", tf.shape(a)) 
print("a v2", a.get_shape()) 
with tf.Session() as sess: 
    print("a v3", sess.run(tf.shape(a))) 

出力は次のようになります。単純に

a v1 Tensor("Shape:0", shape=(3,), dtype=int32) 
a v2 (2, 3, 4) 
a v3 [2 3 4] 
+0

この答えで何を達成したいのかよく分かりません。 –

0

静的な形状を取得するためにtensor.shapeを使用します。ダイナミックな形状を取得するのに対し

In [102]: a = tf.placeholder(tf.float32, [None, 128]) 

# returns [None, 128] 
In [103]: a.shape.as_list() 
Out[103]: [None, 128] 

tf.shape()を使用します。

dynamic_shape = tf.shape(a) 

次の例のようにyour_tensor.shapeでnumpyの中でいただきたいとあなたはまた、形状を得ることができます。

In [11]: tensr = tf.constant([[1, 2, 3, 4, 5], [2, 3, 4, 5, 6]]) 

In [12]: tensr.shape 
Out[12]: TensorShape([Dimension(2), Dimension(5)]) 

In [13]: list(tensr.shape) 
Out[13]: [Dimension(2), Dimension(5)] 

In [16]: print(tensr.shape) 
(2, 5) 

また、この例では、テンソルのためevalをuatedすることができます。

In [33]: tf.shape(tensr).eval().tolist() 
Out[33]: [2, 5] 
関連する問題