2017-09-09 68 views
11

बनाने मैं TensorFlowSharp साथ एक छोटी सी tensorflow आवेदन का निर्माण करने की कोशिश करते हैं और कभी कभी मैं इस अपवाद प्राप्त:अपवाद CallbackOnCollectedDelegate जब tensorflow ग्राफ

प्रबंधित डिबगिंग सहायक 'CallbackOnCollectedDelegate'

समारोह TensorFlowSharp के लिए! TensorFlow.TFBuffer + BufferReleaseFunc ::

मैंने यह जानने का प्रयास किया कि इसका क्या अर्थ है लेकिन मैं पूरी तरह से समझ नहीं पाया और स्पष्टीकरण। यह कोड का हिस्सा है जहां अपवाद फेंक दिया गया है:

var graph = new TFGraph(); 
var model = File.ReadAllBytes(ModelsFile); 
graph.Import(model, ""); 

क्या कोई जानता है कि मुझे इस अपवाद को रोकने के लिए क्या करना चाहिए?

ब्रूनो

+0

https://github.com/pythonnet/pythonnet/issues/473 – denfromufa

+0

@ ब्रूनो असली मुद्दा क्या था? – wp78de

उत्तर

2

मुझे लगता है इस TensorflowSharp में एक बग है।

त्रुटि सीएलआर कोड में आम तौर पर असंगत पहुंच उल्लंघन की तरह दिखती है (आमतौर पर केवल भारी भार या यादृच्छिक संख्या में प्रयासों के दौरान होती है)। माइक्रोसॉफ्ट docs से हवाला देते हुए:

callbackOnCollectedDelegate कामयाब डिबगिंग सहायक (एमडीए) है सक्रिय करता है, तो एक प्रतिनिधि एक समारोह सूचक के रूप में अप्रबंधित कोड में कामयाब से मार्शल जाता है और एक कॉलबैक प्रतिनिधि के बाद कि समारोह सूचक पर रखा गया है कचरा इकट्ठा किया गया है।

इस प्रकार की त्रुटि तब होती है जब एक प्रतिनिधि जिस से फ़ंक्शन पॉइंटर बनाया गया था और अप्रबंधित कोड के संपर्क में था, कचरा इकट्ठा किया गया था। जब अप्रबंधित घटक फ़ंक्शन पॉइंटर पर कॉल करने का प्रयास करता है, तो यह एक एक्सेस उल्लंघन उत्पन्न करता है। विफलता यादृच्छिक प्रतीत होती है क्योंकि यह कचरा संग्रह कब होता है इस पर निर्भर करता है।

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

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

तो, मुझे लगता है कि पुस्तकालय के निर्माता को इसकी रिपोर्ट करना सबसे अच्छा है।

2

मैं इस बग, Buffer.cs में एक प्रतिनिधि के लिए केवल एक अच्छा उम्मीदवार देखता हूं। लेकिन मिगुएल ने 27 जुलाई को इस बग को पहले से ही तय किया है, is here diff। तो बस अपनी प्रति अपडेट करना सुनिश्चित करें। यदि आप इसे Nuget से प्राप्त करते हैं तो सुनिश्चित करें कि आपके पास कम से कम संस्करण 1 है।30