2016-08-06 6 views
5

मेरे पास एक आयाम a आयाम (1, 5) है जो मैं अपने मिनी-बैच के आकार के रूप में कई बार 'टाइल' करना चाहता हूं। उदाहरण के लिए, यदि मिनी-बैच आकार 32 है तो मैं आयाम (32, 5) का एक टेंसर c बनाना चाहता हूं जहां प्रत्येक पंक्ति के मूल (1, 5) चर a के समान मान होते हैं।टाइलफोर्लो आकार एक टाइल वाले टेंसर

लेकिन मैं केवल रन टाइम पर मिनी बैच आकार पता है: यह एक प्लेसहोल्डर b के आयाम 0 के आकार है:

a = tf.Variable(np.random.uniform(size=(1,5))) 
b = tf.placeholder(shape=[None, 12], dtype=tf.float32) 
batch_size = tf.shape(b)[0] 
c = tf.tile(a, tf.pack([batch_size, 1])) 

यह ठीक चलाता है: tf.shape(b)[0]

यहाँ ग के निर्माण के लिए मेरा कोड यह है । हालांकि c.get_shape() रिटर्न (?,?)। मुझे समझ में नहीं आता कि यह क्यों नहीं लौटाता है (?, 5) इसके बजाय।

यह मेरे कोड में बाद में एक समस्या उत्पन्न कर रहा है जब मैं मैट्रिक्स वेरिएबल W का निर्माण कॉलम c.get_shape()[1] की संख्या के साथ करता हूं, जिसे मैं 5 की बजाय वापस लौटने की उम्मीद करता हूं?

किसी भी मदद की सराहना की जाएगी। धन्यवाद।

+0

कौन सा संस्करण? एक समान मुद्दा 0.10 आरसी में संबोधित किया गया था। इसके अलावा आप set_shape को वर्कअराउंड –

+0

के रूप में उपयोग कर सकते हैं धन्यवाद, set_shape नौकरी करता है। । संस्करण 0.8.0rc0 है। –

उत्तर

3

[संपादित करें: यह 10 अगस्त को TensorFlow करने के लिए एक commit में तय किया गया था, 2016]

यह TensorFlow के आकार अनुमान की ज्ञात सीमा है: जब tf.tile()-multiples तर्क एक गणना मूल्य (जैसे है tf.pack() के परिणामस्वरूप), और इसका मान ग्राफ निर्माण समय पर मामूली रूप से गणना योग्य नहीं है (इस मामले में, क्योंकि यह tf.placeholder() पर निर्भर करता है, जिसका तब तक कोई मूल्य नहीं है जब तक इसे खिलाया नहीं जाता है), वर्तमान आकार अनुमान उसके हाथों को फेंक देगा और घोषणा करें कि आकार अज्ञात है (लेकिन इनपुट के समान रैंक के साथ, a)।

वर्तमान वर्कअराउंड Tensor.set_shape() का उपयोग करना है, जो आपको प्रोग्रामर के रूप में अतिरिक्त आकार की जानकारी प्रदान करने की अनुमति देता है जब आप आकार अनुमान से अधिक जानते हैं। उदाहरण के लिए, तुम कर सकते हो:

a = tf.Variable(np.random.uniform(size=(1, 5))) 
b = tf.placeholder(shape=[None, 12], dtype=tf.float32) 
batch_size = tf.shape(b)[0] 
c = tf.tile(a, tf.pack([batch_size, 1])) 
c.set_shape([None, a.get_shape()[1]]) # or `c.set_shape([None, 5])` 

हालांकि, हम हाल ही में कि यह संभव आंशिक रूप से गणना मूल्यों कि आकार के रूप में इस्तेमाल किया जा सकता है प्रचार करने के लिए बनाने के कुछ सुविधाएं जोड़ी है, और इस tf.tile() के लिए आकार समारोह सहायता करने के लिए अनुकूलित किया जा सकता। मैंने इसे ट्रैक करने के लिए GitHub issue बनाया है, और मेरे पास अभी एक फ़िक्स परीक्षण किया जा रहा है।

+0

नौकरी के आसपास काम करता है। बहुत धन्यवाद, खासकर विस्तृत स्पष्टीकरण के लिए। –

+0

ध्यान दें कि 'पैक' को 'स्टैक' द्वारा प्रतिस्थापित किया गया है –

संबंधित मुद्दे