चेतावनी: टेंसरफ़्लो: नमूना_वेट मोड से… [[…] के लिए मजबूर किया गया


47

एक शब्दकोश का उपयोग .fit_generator()या .fit()पारित करने के लिए एक छवि क्लासिफायरफ़ॉर्म प्रशिक्षणclass_weight=एक तर्क के रूप में ।

मुझे TF1.x में त्रुटियां कभी नहीं मिलीं, लेकिन 2.1 में प्रशिक्षण शुरू करते समय मुझे निम्न आउटपुट मिले:

WARNING:tensorflow:sample_weight modes were coerced from
  ...
    to  
  ['...']

किसी चीज़ का ज़बरदस्ती करने का क्या मतलब ...है ['...']?

tensorflowरेपो पर इस चेतावनी का स्रोत यहां है , रखी गई टिप्पणियाँ हैं:

लक्ष्य संरचना के लिए नमूना_वेट_मॉडर्स के साथ तालमेल करने का प्रयास करें। यह स्पष्ट रूप से इस तथ्य पर निर्भर करता है कि मॉडल अपने आंतरिक प्रतिनिधित्व के लिए आउटपुट को समतल करता है।


7
इस तरह के एक हालिया प्रश्न को देखने के लिए मजेदार है, साथ ही मेरी स्वयं की चेतावनियों के लिए एकमात्र खोज परिणाम भी।
jmkjaer

1
@jorijnsmit आपको समस्या / चेतावनी को दोहराने के लिए कोड प्रदान कर सकता है?
ठशव।

2
वास्तव में TF2 के साथ स्विच %tensorflow_version 2.xकरना इस चेतावनी को प्रदर्शित करने के लिए पर्याप्त है: colab.research.google.com/gist/jorijnsmit/…
jorijnsmit

1
@jorijnsmit, नहीं, मुझे एक ही चेतावनी मिलती है, लेकिन वास्तव में TF2.1 स्थापित किया है pip install tensorflow(pyenv / virtualenv पर्यावरण के भीतर)
lurix66

1
हां वास्तव में @ lurix66, जो कोड इस त्रुटि को उत्पन्न करता है, में पेश किया गया है 2.1.0rc0
जोरिजसमिट

जवाबों:


11

यह एक फर्जी संदेश की तरह लगता है। मुझे TensorFlow 2.1 में अपग्रेड करने के बाद एक ही चेतावनी संदेश मिलता है, लेकिन मैं किसी भी वर्ग भार या नमूना भार का उपयोग नहीं करता हूं। मैं एक जनरेटर का उपयोग करता हूं जो इस तरह से एक टपल लौटाता है:

return inputs, targets

और अब मैंने चेतावनी देने के लिए इसे केवल निम्नलिखित में बदल दिया:

return inputs, targets, [None]

मुझे नहीं पता कि क्या यह प्रासंगिक है, लेकिन मेरे मॉडल में 3 इनपुट का उपयोग किया गया है, इसलिए मेरा inputsचर वास्तव में 3 संख्यात्मक सरणियों की एक सूची है। targetsबस एक एकल सुन्न सरणी है।

किसी भी मामले में, यह सिर्फ एक चेतावनी है। प्रशिक्षण दोनों तरह से ठीक काम करता है।

TensorFlow 2.2 के लिए संपादित करें:

यह बग TensorFlow 2.2 में तय किया गया है, जो बहुत अच्छा है। हालांकि टीएफ 2.2 में ऊपर तय असफल हो जाएगा, क्योंकि यह नमूना भार का आकार प्राप्त करने की कोशिश करेगा, जो स्पष्ट रूप से साथ विफल हो जाएगा AttributeError: 'NoneType' object has no attribute 'shape'। तो 2.2 को अपग्रेड करते समय उपरोक्त सुधार को पूर्ववत करें।


यह मेरे लिए भी काम करता है।
रॉबर्ट लैग

14

मेरा मानना ​​है कि यह टेंसोफ़्लो के साथ एक बग है जो तब होगा जब आप model.compile()डिफ़ॉल्ट पैरामीटर के साथ कॉल करेंगे sample_weight_mode=Noneऔर फिर model.fit()निर्दिष्ट sample_weightया के साथ कॉल करेंगे class_weight

टेंसरफ़्लो रेपो से:

  • fit() अंततः कॉल करता है _process_training_inputs()
  • _process_training_inputs() के sample_weight_modes = [None] आधार पर सेट करता है model.sample_weight_mode = Noneऔर फिर एक बनाता हैDataAdapter के साथsample_weight_modes = [None]
  • DataAdapterकॉल broadcast_sample_weight_modes()के साथ sample_weight_modes = [None]के दौरान प्रारंभ
  • broadcast_sample_weight_modes() उम्मीद करने लगता है sample_weight_modes = None करता लेकिन प्राप्त करता है[None]
  • यह दावा करता है कि / [None]से एक अलग संरचना है , इसे वापस ढाँचा द्वारा ढाला जाता है / और एक चेतावनी को आउटपुट करता हैsample_weightclass_weightNonesample_weightclass_weight

इसके पीछे चेतावनी के fit()रूप sample_weight_modesमें पर कोई प्रभाव नहीं DataAdapterहै वापस करने के लिए सेट हैNone

ध्यान दें कि टेंसरफ़्लो दस्तावेज़ीकरण बताता है कि sample_weightएक संख्यात्मक-सरणी होना चाहिए। यदि आप इसके बजाय कॉल fit()करते sample_weight.tolist()हैं, तो आपको चेतावनी नहीं मिलेगी, लेकिन जब यह प्रीप्रोसेसिंग में कहा जाता है, तो sample_weightचुपचाप ओवरराइट हो जाता है और एक से अधिक लंबाई का इनपुट प्राप्त करता है।None_process_numpy_inputs()


1
एक बहुत गहन व्याख्या, धन्यवाद। केवल एक चीज जो मुझे समझ में नहीं आती है वह यह है कि चेतावनी का वर्णन ...करने के लिए मजबूर किया जा रहा है [...], जबकि आपके मामले [None]में ज़बरदस्ती की जाती है None...
jorijnsmit

4

मैंने आपका Gist लिया है और TFA के बजाय Tensorflow 2.0 स्थापित किया है, और इसने बिना किसी चेतावनी के काम किया है।

यहाँ पूर्ण कोड का जिस्ट है। Tensorflow स्थापित करने के लिए कोड नीचे दिखाया गया है:

!pip install tensorflow==2.0

सफल निष्पादन का स्क्रीनशॉट नीचे दिखाया गया है:

यहां छवि विवरण दर्ज करें

अद्यतन: यह बग में तय किया गया हैTensorflow Version 2.2.


5
आपकी प्रतिक्रिया के लिए धन्यवाद। आप सही हैं, चेतावनी संदेश संस्करण तक पेश नहीं किया गया है 2.1.0rc0। हालांकि, मुझे डर है कि मेरा सवाल बना रहेगा: "इससे कुछ करने का क्या मतलब ...है ['...']?"
jorijnsmit

3
मैंने देखा है कि कुछ शायद अनायास ही सामान होता है जब sample_weight_mode=Noneऔर target_structureप्रकार का है dict, sample_weight_modesतो है [None]और में अपवाद broadcast_sample_weight_modesकी वजह से पकड़ा है dict। क्या इसे बग के रूप में माना जा सकता है?
फ्रांज न्यूलल

2
नहीं। प्रश्न विचार और उत्थान जुटाता रहता है लेकिन उत्तर नहीं।
२०

1
@gkennos: यदि आपको लगता है कि यह एक बग है, तो क्या आप Github Tensorflow Repository में बग दर्ज कर सकते हैं।
Tensorflow समर्थन

1
यह निश्चित रूप से एक बग है, लेकिन अब यह TensorFlow 2.2
jlh

2

एक शब्दकोश प्रदान करने के बजाय

weights = {'0': 42.0, '1': 1.0}

मैंने एक सूची की कोशिश की

weights = [42.0, 1.0]

और चेतावनी गायब हो गई।


धन्यवाद दोस्त! मैं शब्दकोशों के साथ (असफल) कोशिश कर रहा था। सूची का उपयोग करके त्रुटि को ठीक किया जाता है!
विक्टर मोंडेजार-गुएरा

जबकि यह त्रुटि से छुटकारा दिलाता है, मेरे लिए यह प्रत्येक वर्ग के लिए वेटिंग को तोड़ता है और खराब परिणाम देता है। मैं सूची में जाने से पहले संगति की जाँच करूँगा।
कैनफड्रिंक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.