2017-07-28 18 views
6

मैं tensorboard हिस्टोग्राम में tf.layers.dense के वजन को आकर्षित करना चाहता हूं, लेकिन यह पैरामीटर में नहीं दिखाया गया है, मैं यह कैसे कर सकता हूं?tf.layers.dense में वजन कैसे प्राप्त करें?

+1

स्टैक ओवरफ्लो में आपका स्वागत है! कृपया [सहायता पृष्ठ] (http://stackoverflow.com/help) पढ़ने के लिए कुछ समय दें, विशेष रूप से नामित अनुभाग ["मैं यहां कौन से विषय पूछ सकता हूं?"] (Http://stackoverflow.com/help/ विषय पर) और ["मुझे किस प्रकार के प्रश्न पूछने से बचना चाहिए?"] (http://stackoverflow.com/help/dont-ask)। कृपया [टूर] (http://stackoverflow.com/tour) लें और [अच्छे प्रश्न पूछने के तरीके] के बारे में पढ़ें (http://stackoverflow.com/help/how-to-ask)। आखिरकार कृपया जानें कि [न्यूनतम, पूर्ण, और सत्यापन योग्य उदाहरण] कैसे बनाएं (http://stackoverflow.com/help/mcve)। – Markus

उत्तर

11

वजन kernel नामक एक चर के रूप में जोड़े जाते हैं, तो आप

x = tf.dense(...) 
weights = tf.get_default_graph().get_tensor_by_name(
    os.path.split(x.name)[0] + '/kernel:0')) 

इस्तेमाल कर सकते हैं आप स्पष्ट रूप से किसी अन्य ग्राफ तुम में काम कर रहे हैं द्वारा tf.get_default_graph() बदल सकते हैं।

+0

बढ़िया! यह मेरा सवाल हल करता है। धन्यवाद – user8381550

+3

और पूर्वाग्रह प्राप्त करने के लिए बस 'पूर्वाग्रह = टीएफ का उपयोग करें।get_default_graph()। get_tensor_by_name ( os.path.split (x.name) [0] + '/ पूर्वाग्रह: 0') ' – collector

+0

ऐसा लगता है कि इसे हल किए जाने के रूप में चिह्नित किया जाना चाहिए। –

2

नवीनतम tensorflow परतों एपीआई सभी बनाता है tf.get_variable कॉल का उपयोग कर चर। यह सुनिश्चित करता है कि यदि आप फिर से चर का उपयोग करना चाहते हैं, तो आप केवल tf.get_variable फ़ंक्शन का उपयोग कर सकते हैं और उस चर का नाम प्रदान कर सकते हैं जिसे आप प्राप्त करना चाहते हैं।

tf.layers.dense के मामले में, चर को layer_name/kernel के रूप में बनाया गया है। तो, आप कह रही द्वारा चर प्राप्त कर सकते हैं:

weights = tf.get_variable("layer_name/kernel") # do not specify 
# the shape here or it will confuse tensorflow into creating a new one. 

[संपादित करें]: Tensorflow का नया संस्करण अब परतों api के लिए दोनों कार्यात्मक और वस्तु उन्मुख इंटरफेस है। यदि आपको केवल कम्प्यूटेशनल उद्देश्यों के लिए परतों की आवश्यकता है, तो कार्यात्मक एपीआई का उपयोग करना एक अच्छा विकल्प है। फ़ंक्शन नाम उदाहरण के लिए छोटे अक्षरों से शुरू होते हैं ->tf.layers.dense(...)। पूंजी ऑब्जेक्ट्स को पूंजी के पहले अक्षर का उपयोग करके बनाया जा सकता है उदा। ->tf.layers.Dense(...)। एक बार जब आप इस परत ऑब्जेक्ट को संभाल लेंगे, तो आप इसकी सभी कार्यक्षमताओं का उपयोग कर सकते हैं। वजन प्राप्त करने के लिए, बस obj.trainable_weights का उपयोग करें, यह उस परत के दायरे में पाए गए सभी प्रशिक्षित चरों की एक सूची देता है।

2

मैं इस समस्या से आया और बस इसे हल किया। tf.layers.dense का नाम कर्नेल के नाम के उपसर्ग के साथ समान नहीं है। मेरा टेंसर "dense_2/xxx" है लेकिन यह कर्नेल "dense_1/कर्नेल: 0" है। यह सुनिश्चित करने के लिए कि tf.get_variable काम करता है, तो आप tf.layers.dense फ़ंक्शन में name=xxx को बेहतर तरीके से सेट करने के लिए दो नाम बनाने के लिए बेहतर सेट करेंगे। यह नीचे डेमो के रूप में काम करता है:

l=tf.layers.dense(input_tf_xxx,300,name='ip1') 
with tf.variable_scope('ip1', reuse=True): 
    w = tf.get_variable('kernel') 

वैसे, मेरा टीएफ संस्करण 1.3 है।

0

मैं tensorflow के साथ पागल हो रहा हूँ।

मैं इस चलाएँ:

sess.run(x.kernel)

प्रशिक्षण के बाद, और मैं वजन मिलता है।

here वर्णित गुणों से आता है।

मैं कह रहा हूं कि मैं पागल हो रहा हूं क्योंकि ऐसा लगता है कि टीएफ में कुछ करने के लिए दस लाख अलग-अलग तरीके हैं, और यह ट्यूटोरियल के आसपास के टुकड़े हैं।

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