एक बार जब आपका नुकसान बढ़ना शुरू हो जाता है (या दूसरे शब्दों में सत्यापन सटीकता कम होने लगती है) तो शुरुआती रोक मूल रूप से प्रशिक्षण को रोकती है। दस्तावेजों के अनुसार इसका उपयोग निम्नानुसार किया जाता है;
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=0,
verbose=0, mode='auto')
मान आपके कार्यान्वयन (समस्या, बैच आकार आदि ...) पर निर्भर करता है, लेकिन आम तौर पर ओवरफिटिंग को रोकने के लिए मैं उपयोग करता हूं;
monitor
तर्क हानि की निगरानी करें ( तर्क को पार करने के लिए क्रॉस सत्यापन या कम से कम ट्रेन / परीक्षण सेट का उपयोग करने की आवश्यकता है) 'val_loss'
।
min_delta
सुधार के रूप में कुछ युगों में नुकसान की मात्रा निर्धारित करना है या नहीं, इसकी एक सीमा है। यदि नुकसान का अंतर नीचे है min_delta
, तो इसे बिना किसी सुधार के निर्धारित किया जाता है। जब नुकसान कम हो जाता है, तो हम इसे 0 के रूप में छोड़ना बेहतर समझते हैं।
patience
तर्क यह बताने से पहले कि आपका नुकसान बढ़ना शुरू हो जाता है (सुधार करना बंद कर देता है) रुकने से पहले युगों की संख्या का प्रतिनिधित्व करता है। यह आपके कार्यान्वयन पर निर्भर करता है, यदि आप बहुत छोटे बैचों
या एक बड़े सीखने की दर का उपयोग करते हैं तो आपका नुकसान जिग-ज़ैग (सटीकता अधिक शोर होगा) इतना बेहतर है कि एक बड़ा patience
तर्क सेट करें । यदि आप बड़े बैचों और एक छोटे से सीखने की दर का उपयोग करते हैं तो आपका नुकसान कम हो जाएगा, इसलिए आप एक छोटे patience
तर्क का उपयोग कर सकते हैं । किसी भी तरह से मैं इसे 2 के रूप में छोड़ दूंगा ताकि मैं मॉडल को अधिक मौका दूं।
verbose
क्या प्रिंट करना है, यह तय करना (डिफ़ॉल्ट) पर।
mode
तर्क इस बात पर निर्भर करता है कि आपकी निगरानी की गई मात्रा किस दिशा में है (क्या घटने या बढ़ने वाली है), चूंकि हम नुकसान की निगरानी करते हैं, इसलिए हम इसका उपयोग कर सकते हैं min
। लेकिन चलो हमारे लिए किर्स को संभालते हैं और इसे सेट करते हैंauto
तो मैं इस तरह से कुछ का उपयोग करेगा और जल्दी रोक के साथ और बिना त्रुटि हानि की साजिश रचकर प्रयोग करूंगा।
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=2,
verbose=0, mode='auto')
कॉलबैक कैसे काम करता है, इस पर संभावित अस्पष्टता के लिए, मैं और अधिक समझाने की कोशिश करूँगा। एक बार जब आप fit(... callbacks=[es])
अपने मॉडल पर कॉल करते हैं, तो केरस कॉलबैक ऑब्जेक्ट्स को पूर्व निर्धारित कार्यों को कॉल करता है। इन कार्यों कहा जा सकता है on_train_begin
, on_train_end
, on_epoch_begin
, on_epoch_end
और on_batch_begin
, on_batch_end
। प्रारंभिक रोक कॉलबैक को प्रत्येक युग के अंत में कहा जाता है, वर्तमान एक के साथ सर्वोत्तम मॉनिटर किए गए मूल्य की तुलना करता है और अगर स्थिति पूरी हो जाती है तो रुक जाता है (सर्वोत्तम निगरानी मूल्य के अवलोकन के बाद से कितने युग अतीत हैं और क्या यह धैर्य तर्क से अधिक है, के बीच का अंतर अंतिम मान min_delta आदि से बड़ा है ..)।
जैसा कि टिप्पणियों में @BrentFaust द्वारा बताया गया है, मॉडल का प्रशिक्षण तब तक जारी रहेगा जब तक या तो प्रारंभिक शर्तें पूरी नहीं हो जाती हैं या epochs
पैरामीटर (डिफ़ॉल्ट = 10) fit()
संतुष्ट है। अर्ली स्टॉपिंग कॉलबैक सेट करने से मॉडल को उसके epochs
पैरामीटर से परे प्रशिक्षण नहीं मिलेगा । इसलिए fit()
एक बड़े epochs
मूल्य के साथ कॉलिंग फ़ंक्शन को शुरुआती स्टॉपबैक कॉलबैक से अधिक लाभ होगा।
min_delta
यह एक सीमा है कि निगरानी मूल्य में सुधार को सुधार के रूप में निर्धारित किया जाए या नहीं। हां, अगर हम देते हैंmonitor = 'val_loss'
तो यह वर्तमान सत्यापन हानि और पिछले सत्यापन हानि के बीच अंतर को संदर्भित करेगा। व्यवहार में, यदि आपmin_delta=0.1
सत्यापन हानि में कमी देते हैं (वर्तमान - पिछले) 0.1 से छोटा तो मात्रा निर्धारित नहीं होगा, इस प्रकार प्रशिक्षण बंद हो जाएगा (यदि आपके पास हैpatience = 0
)।