स्थिति:प्रशिक्षण TensorFlow
मैं बेहतर TensorFlow का उपयोग कैसे करें जब मेरे प्रशिक्षण डेटा 2 लेबल के बीच लेबल वितरण में असंतुलित है सोच रहा हूँ। उदाहरण के लिए, मान लें कि MNIST tutorial केवल 1 और 0 के बीच अंतर करने के लिए सरलीकृत है, जहां हमारे लिए उपलब्ध सभी छवियां या तो 1 या 0 है। यह उपलब्ध टेंसरफ्लो ट्यूटोरियल का उपयोग करके ट्रेन करने के लिए सीधा है जब हमारे पास प्रशिक्षित करने और परीक्षण करने के लिए प्रत्येक प्रकार की छवि का लगभग 50% हिस्सा होता है। लेकिन इस मामले के बारे में क्या है जहां हमारे डेटा में उपलब्ध 90% छवियां 0 हैं और केवल 10% 1 हैं? मैं देखता हूं कि इस मामले में, टेंसरफ्लो नियमित रूप से मेरे पूरे टेस्ट सेट को 0 के होने की भविष्यवाणी करता है, जो अर्थहीन 90% की सटीकता प्राप्त करता है।
एक ऐसी रणनीति जिसे मैंने कुछ सफलता के लिए उपयोग किया है वह प्रशिक्षण के लिए यादृच्छिक बैच चुनना है जिसमें 0 और 1 का वितरण भी हो। यह दृष्टिकोण सुनिश्चित करता है कि मैं अभी भी अपने सभी प्रशिक्षण डेटा का उपयोग कर सकता हूं और 9 0% से कम सटीकता के साथ सभ्य परिणाम उत्पन्न कर सकता हूं, लेकिन एक और अधिक उपयोगी वर्गीकरणकर्ता। चूंकि इस मामले में सटीकता मेरे लिए कुछ हद तक बेकार है, इसलिए मेरी पसंद का मीट्रिक आम तौर पर आरओसी वक्र (एयूआरओसी) के तहत क्षेत्र होता है, और यह परिणाम 50 से अधिक सम्मानित करता है।
सवाल:
(1) रणनीति मैं असंतुलित डेटा पर प्रशिक्षण का एक स्वीकार किए जाते हैं या इष्टतम तरीका का वर्णन किया है, या वहाँ एक है कि बेहतर काम कर सकते हैं है?
(2) चूंकि सटीकता मीट्रिक असंतुलित डेटा के मामले में उतना उपयोगी नहीं है, क्या कोई और मीट्रिक है जिसे लागत कार्य को बदलकर अधिकतम किया जा सकता है? मैं निश्चित रूप से AUROC पोस्ट-ट्रेनिंग की गणना कर सकता हूं, लेकिन क्या मैं AUROC को अधिकतम करने के लिए इस तरह से ट्रेन कर सकता हूं?
(3) क्या असंतुलित डेटा के लिए मेरे परिणामों को बेहतर बनाने के लिए मैं अपने लागत समारोह में कुछ और बदलाव कर सकता हूं? वर्तमान में, मैं एक डिफ़ॉल्ट सुझाव TensorFlow ट्यूटोरियल में दी गई उपयोग कर रहा हूँ:
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
मैं इस अप-भार छोटे लेबल वर्ग miscategorizing की लागत से संभव हो सकता है सुना है, लेकिन मैं ऐसा करने के तरीके को लेकर अनिश्चित हूं।
आप अपनी समस्या हल है? मुझे एक समान समस्या है और मैं वर्तमान में प्रयोग कर रहा हूं ए) छुपा 1 पर ड्रॉपआउट 50%, बी) हानि पर एल 2 नियमितकरण और सी) सबसे प्रमुख 90% वर्ग को हटाकर और 10% समान रूप से वितरित कक्षाओं के साथ गणना करना। – Frank
मुझे यादृच्छिक बैचों लेने से बेहतर समाधान नहीं मिला। व्यावहारिकता के लिए, मैंने विज्ञान-सीखने में लागू पेड़-आधारित तरीकों के पक्ष में पूरी तरह से तंत्रिका जाल छोड़ दिया। यहां, अंतर्निहित क्रॉस-सत्यापन विधियां हैं जो AUROC पर अनुकूलित कर सकती हैं जो असंतुलन समस्या को खूबसूरती से हल करती है। वे टेंसरफ्लो से भी तेज़ी से दौड़ते हैं क्योंकि मेरे पास बहुत सी सीपीयू हैं लेकिन कोई GPU नहीं है। – MJoseph