2016-04-06 5 views
9

पहला: मैं टेंसफोर्लो के साथ केवल कुछ ही दिनों में हूं, इसलिए कृपया मेरे साथ भालू।मैं टेंसफोर्लो सबग्राफ के लिए केवल ग्रेडियेंट को कैसे परिभाषित कर सकता हूं?

मैंने सीफार 10 ट्यूटोरियल कोड से शुरुआत की और अब मैं प्रतीकात्मक भेदभाव को तोड़ने वाले संकल्पों और ईजिनवेयू अपघटनों के संयोजन का उपयोग कर रहा हूं। अर्थात। ग्राफ बनाया गया है, फिर train() पर कॉल करने पर स्क्रिप्ट "संचालन के लिए परिभाषित कोई ढाल [...] (सेशन प्रकार: SelfAdjointEig)" के साथ रुक जाती है। वहां कोई आश्चर्य नहीं है।

प्रश्न में उपलेख में इनपुट अभी भी केवल इनपुट फीचर मैप्स और फ़िल्टर का उपयोग किया जा रहा है, और मेरे पास ग्रेडियेंट्स के लिए सूत्र हैं और उन्हें सबग्राफ में इनपुट दिए जाने के लिए सीधे आगे बढ़ना चाहिए और इसके उत्पादन के संबंध में ढाल।

मैं दस्तावेज़ों में जो देख सकता हूं उससे, मैं RegisterGradient के साथ कस्टम ओपीएस के लिए एक ढाल विधि पंजीकृत कर सकता हूं या प्रयोगात्मक gradient_override_map के साथ उन्हें ओवरराइड कर सकता हूं। उन दोनों को मुझे उन चीज़ों तक पहुंच प्रदान करनी चाहिए जो मुझे चाहिए। उदाहरण के लिए, searching on Github मुझे ऐसे कई उदाहरण मिलते हैं जो ओप के इनपुट को op.input[0] या ऐसे में एक्सेस करते हैं।

मेरी समस्या यह है कि मैं अनिवार्य रूप से एक संपूर्ण उप-अनुच्छेद "शॉर्टकट" करना चाहता हूं, न कि एक सेशन, इसलिए मेरे पास सजाने के लिए कोई भी एक सेशन नहीं है। चूंकि यह सिफर उदाहरण के संकल्पक परतों में से एक में हो रहा है, इसलिए मैंने उस परत के लिए स्कोप ऑब्जेक्ट का उपयोग करने का प्रयास किया। संकल्पनात्मक रूप से, जो गुंजाइश ग्राफ में प्रवेश करता है और बाहर निकलता है वह वही है जो मैं चाहता हूं ताकि अगर मैं किसी भी तरह से पूरे दायरे के ग्रेडियेंट को ओवरराइड कर सकूं जो "पहले से ही" करेगा।

मैंने tf.Graph.create_op देखा जो (मुझे लगता है) मैं एक नए प्रकार के ऑपरेशन को पंजीकृत करने के लिए उपयोग कर सकता था और फिर मैं उपरोक्त तरीकों के साथ ऑपरेशन प्रकार के ढाल गणना की ओवरराइड कर सकता था। लेकिन मुझे उस ओप के को को सी ++ में लिखने के बिना पास करने का तरीका नहीं दिख रहा है ...

शायद मैं इस गलत तरीके से पूरी तरह से आ रहा हूं? चूंकि मेरे सभी आगे या पिछड़े संचालन को पायथन इंटरफेस के साथ कार्यान्वित किया जा सकता है, इसलिए मैं स्पष्ट रूप से सी ++ में कुछ भी लागू करने से बचना चाहता हूं।

+0

हो सकता है कि आप अपने undifferentiable ग्राफ के शीर्ष पर एक भी सेशन के लिए ढाल ओवरराइड कर सकते हैं, और उसके बाद 'tf.stop_gradient() का उपयोग' कि subgraph के लिए ढाल निर्माण को रोकने के लिए? http://stackoverflow.com/questions/33727935/how-to-use-stop-gradient-in-tensorflow –

+0

मैं स्थानीय रूप से एक ढाल समारोह को परिभाषित करने की कल्पना कर सकता हूं, फिर उसमें अभी भी इन-स्कोप इनपुट का उपयोग कर सकता हूं। लेकिन मैं टीएफ को कैसे बताऊंगा जो उस ग्रेडियेंट गणना में इनपुट के रूप में जो नोड्स 'ग्रेडियेंट्स लेता है? यह मुझे लगता है जैसे मैं मूल रूप से ढांचे का दुरुपयोग कर रहा हूं: पी –

उत्तर

20

यहाँ सेर्गेई Ioffe से एक चाल है:

मान लीजिए आप ऑप्स कि f (x) आगे मोड में के रूप में व्यवहार के समूह चाहते हैं, लेकिन g (x) पिछड़े मोड में के रूप में। आप के रूप में

t = g(x) 
y = t + tf.stop_gradient(f(x) - t) 
अपने मामले अपने g (x) एक पहचान सेशन हो सकता है में

तो इसे लागू, का उपयोग कर gradient_override_map

+1

समझ के लिए: 'stop_gradient' कॉल स्वचालित ग्रेडियंट बिट का ख्याल रखता है, 'जी' के लिए ढाल को ओवरराइड करने से मुझे अपना खुद का और 'टी + एफ (एक्स) - टी 'का चयन किया जाएगा? –

+2

"टी + एफ (एक्स) - टी" का मान "एफ (एक्स)" के बराबर है। यह वर्तमान संस्करण में कम्प्यूटेशनल रूप से समतुल्य है, लेकिन भविष्य के संस्करण में इसे –

+1

को अनुकूलित किया जा सकता है अंत में यह लागू करने में सक्षम था, यद्यपि एक ही समारोह के लिए नहीं। लेकिन यह एकाधिक इनपुट के साथ "कंपाउंड ऑपरेशंस" को अच्छी तरह से सामान्यीकृत नहीं करता है क्योंकि "एड-घटाव" काम नहीं करता है, है ना? सबसे अच्छा मैं सोच सकता था (लेकिन सभी के बाद कोशिश करने की ज़रूरत नहीं थी) किसी भी तरह एक पहचान सेशन के बजाय tuples का उपयोग कर रहा था। लेकिन मैं थोड़ा अस्पष्ट हूं कि ग्राफ बाद में कैसा दिखाई देगा। वैसे भी, बहुत धन्यवाद :) –

-1

कैसे के बारे में गुणा और भाग के बजाय जोड़ने और टी घटाकर एक कस्टम ढाल के साथ?

t = g(x) 
y = tf.stop_gradient(f(x)/t) * t 
+0

dy/dt यहाँ है (एफ (एक्स)/टी) * डीई - जो हम चाहते थे नहीं। बाएं हाथ के माध्यम से ढाल को रोकना आगे के परिणाम का उपयोग करके गुणा के व्युत्पन्न को रोकता नहीं है। – lahwran

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

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