2017-04-17 7 views
7

मैं कई दिनों के लिए इस समस्या से उलझन में था ...क्या fit_generator में "samples_per_epoch" और "steps_per_epoch" के बीच अंतर

मेरा प्रश्न है कि मैं batch_size सेट क्यों प्रशिक्षण समय है कि इस तरह के बड़े पैमाने पर के बीच अंतर है मेरे जनरेटर के लिए "1" और "20" होना।

अगर मैं होने के लिए , प्रशिक्षण समय 1 युग की लगभग 180 ~ 200 सेकंड है batch_size निर्धारित किया है। अगर मैं सेट batch_size , प्रशिक्षण समय 1 युग की होने के लिए लगभग 3000 ~ 3200 सेकंड है।

हालांकि, इन प्रशिक्षण समयों के बीच यह भयानक अंतर असामान्य लगता है ..., क्योंकि इसे उलट परिणाम होना चाहिए: batch_size = 1, प्रशिक्षण समय -> 3000 ~ 3200 सेकंड। बैच_साइज = 20, प्रशिक्षण समय -> 180 ~ 200 सेकंड।

मेरे जेनरेटर में इनपुट फ़ाइल पथ नहीं है, लेकिन numpy arrays जो पहले से ही मेमोरी में "np.load()" कॉल करके लोड हो चुके हैं। तो मुझे लगता है कि I/O व्यापार-बंद समस्या मौजूद नहीं है।

मैं Keras-2.0.3 का उपयोग कर रहा है और मेरे बैकएंड tensorflow-GPU 1.0.1

मैंने देखा है इस का अद्यतन विलय कर दिया PR, है लेकिन ऐसा लगता है कि इस बदलाव पर भी प्रभावित नहीं करेगा सब। (उपयोग मूल के साथ ही वही है)

link यहां मेरे स्वयं परिभाषित जनरेटर और मेरे fit_generator का हिस्सा है।

कोई मुझे इस समस्या की व्याख्या करने में मदद कर सकता है? आपको बहुत बहुत धन्यवाद :)

उत्तर

11

जब आप fit_generator का उपयोग करते हैं, तो प्रत्येक युग के लिए संसाधित नमूनों की संख्या batch_size * steps_per_epochs है। https://keras.io/models/sequential/

steps_per_epoch: कदम (नमूने के बैच) एक युग समाप्त घोषित करने और अगले युग शुरू करने से पहले जनरेटर से उपज की कुल संख्या fit_generator के लिए Keras प्रलेखन से। यह आमतौर पर बैच आकार से विभाजित अपने डेटासेट के अद्वितीय नमूने की संख्या के बराबर होना चाहिए।

यह 'फिट' के व्यवहार से अलग है, जहां बढ़ते बैच_साइज आमतौर पर चीजों को गति देता है।

निष्कर्ष में, जब आप fit_generator के साथ बैच_साइज बढ़ाते हैं, तो आपको उसी कारक द्वारा step_per_epochs को कम करना चाहिए, अगर आप समान या कम रहने के लिए प्रशिक्षण समय चाहते हैं।

+0

उत्तर देने के लिए धन्यवाद! मुझे लगता है कि मेरा मूल इसके साथ समान है (step_per_epochs # कुल नमूने/बैच_साइज के बराबर होना चाहिए)। लेकिन मर्ज किए गए पुल अनुरोध ने मुझे बहुत उलझन में डाल दिया ... ठीक है, मुझे अंत में मिल गया! आपका बहुत बहुत धन्यवाद! – HappyStorm

+2

मैं fit_generator() दिनचर्या में कहीं भी निर्दिष्ट बैच_साइज नहीं देख रहा हूं। तो यह बैच_साइज कहां से कह रहा है? क्या वे बैच_साइज को परिभाषित कर रहे हैं (आपके जेनरेटर की लंबाई)/(step_per_epoch)? वे कहते हैं कि यह "आम तौर पर बराबर" है, लेकिन यह इंगित करेगा कि यह बिल्कुल बराबर है। –

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