2016-05-07 6 views
32

में गलत आकार मैं इस तरह एक टेन्सर को परिभाषित:tf.shape() मिल tensorflow

print(tf.shape(x))

मैं:

x = tf.get_variable("x", [100])

लेकिन जब मैं टेन्सर के आकार प्रिंट करने का प्रयास टेंसर ("आकार: 0", आकार = (1,), dtype = int32), आउटपुट का परिणाम आकार क्यों नहीं होना चाहिए = (100)

+0

मैंने पाया [इस] (https://stackoverflow.com/a/41771268/1358091) एक टेन्सर के आकार का विश्लेषण करने के लिए बहुत उपयोगी जवाब देने के बावजूद इसे स्वीकार कर लिया एक नहीं है। –

उत्तर

73

tf.shape(input, name=None) इनपुट के आकार का प्रतिनिधित्व करने वाला 1-डी पूर्णांक टेंसर देता है।

आप देख रहे हैं: x.get_shape() जो चर के TensorShape देता है।

+15

'x.get_shape()। As_list() 'आकार को एक मानक पायथन सूची में बदलने के लिए अक्सर उपयोग किया जाने वाला रूप है। संदर्भ के लिए यहां जोड़ा गया। –

9

स्पष्टीकरण:

tf.shape (एक्स) एक सेशन बनाता है और एक वस्तु जो निर्माण सेशन के उत्पादन, है जो आप वर्तमान में प्रिंट कर रहे हैं के लिए खड़ा है देता है। आकार पाने के लिए, एक सत्र में ऑपरेशन चलाने:

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 में, एक टेन्सर दोनों एक स्थिर (inferred) आकार और एक गतिशील (सही) आकार है। स्थिर आकार को tf.Tensor.get_shape विधि का उपयोग करके पढ़ा जा सकता है: यह आकार ऑपरेशन से अनुमानित है जिसका उपयोग टेंसर बनाने के लिए किया गया था, और आंशिक रूप से पूर्ण हो सकता है। यदि स्थिर आकार पूरी तरह परिभाषित नहीं है, तो टेंसर टी का गतिशील आकार tf.shape(t) का मूल्यांकन करके निर्धारित किया जा सकता है।

तो tf.shape() रिटर्न आप एक टेन्सर, हमेशा shape=(N,) के आकार होगा, और एक सत्र में गणना की जा सकती: x.get_shape().as_list() का उपयोग करके

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

दूसरी ओर आप स्थिर आकार निकाल सकते हैं पर और इसकी गणना कहीं भी की जा सकती है।

+0

'आकार = (एन,)' का प्रतिनिधित्व क्या है? क्या आप उदाहरण दिखा सकते हैं जब स्थिर आकार और डाइनैमिक आकार अलग होता है? – mrgloom

+0

@mrgloom आकार = (एन,) आकार n के एक वेक्टर का प्रतिनिधित्व करता है। ऐसा उदाहरण दिखाना आसान नहीं है क्योंकि आपको आकार –

3

@ साल्वाडोर डाली के उत्तर पर आधारित एक त्वरित उदाहरण।

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) 

तुम भी आकार आप चाहते के रूप में प्राप्त कर सकते हैं NumPy में साथ your_tensor.shape निम्न उदाहरण में।

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) 

इसके अलावा, इस उदाहरण के लिए, tensors के लिए eval uated जा सकता है।

In [33]: tf.shape(tensr).eval().tolist() 
Out[33]: [2, 5]