তাড়াতাড়ি থামার জন্য কোন পরামিতি ব্যবহার করা উচিত?


103

আমি কেরাস ব্যবহার করে আমার প্রকল্পের জন্য একটি নিউরাল নেটওয়ার্ক প্রশিক্ষণ দিচ্ছি। কেরাস তাড়াতাড়ি থামার জন্য একটি ফাংশন সরবরাহ করেছে। আমি কি জানতে পারি যে আমার নিউরাল নেটওয়ার্ককে প্রাথমিক পর্যায়ে থামিয়ে দিয়ে ওভারফিট করা থেকে বিরত রাখতে কোন প্যারামিটারগুলি পালন করা উচিত?

উত্তর:


164

তাড়াতাড়ি থামছে

আপনার ক্ষয় বাড়তে শুরু করার পরে প্রাথমিকভাবে থামানো হ'ল প্রশিক্ষণ বন্ধ করে দেয় (বা অন্য কথায় বৈধতার যথাযথতা হ্রাস শুরু হয়)। দলিল অনুসারে এটি নিম্নলিখিত হিসাবে ব্যবহৃত হয়;

keras.callbacks.EarlyStopping(monitor='val_loss',
                              min_delta=0,
                              patience=0,
                              verbose=0, mode='auto')

মানগুলি আপনার বাস্তবায়নের উপর নির্ভর করে (সমস্যা, ব্যাচের আকার ইত্যাদি ...) তবে সাধারণত আমি অতিরিক্ত ব্যবহার করা আটকাব না;

  1. monitor যুক্তিটি সেট করে বৈধতা ক্ষতি (ক্রস বৈধকরণ বা কমপক্ষে ট্রেন / পরীক্ষা সেট ব্যবহার করা প্রয়োজন) নিরীক্ষণ করুন 'val_loss'
  2. min_deltaউন্নয়নের হিসাবে কোনও কোনও যুগে লোকসানের পরিমাণ মেটানো কিনা তা একটি দ্বারপ্রান্ত। ক্ষতির পার্থক্যটি নীচে থাকলে min_deltaএটি কোনও উন্নতি হিসাবে মাপকৃত। এটিকে 0 হিসাবে রেখে দেওয়া ভাল কারণ যখন ক্ষতির পরিমাণ আরও খারাপ হয় তখন আমরা আগ্রহী।
  3. patienceআপনার ক্ষতি বাড়তে শুরু করার পরে (যুক্ত হওয়া উন্নতি করতে) যুক্তিটি থামানোর আগে পর্বগুলির সংখ্যা উপস্থাপন করে। এটি আপনার বাস্তবায়নের উপর নির্ভর করে, যদি আপনি খুব ছোট ব্যাচ বা বৃহত শিক্ষার হার ব্যবহার করেন তবে আপনার ক্ষতির জিগ-জাগ (যথাযথতা আরও গোলমাল হবে) সুতরাং একটি বৃহত patienceযুক্তি নির্ধারণ করুন । আপনি যদি বড় ব্যাচ এবং একটি ছোট শিক্ষার হার ব্যবহার করেন তবে আপনার ক্ষয়টি মসৃণ হবে যাতে আপনি একটি ছোট patienceযুক্তি ব্যবহার করতে পারেন । যেভাবেই আমি এটি 2 হিসাবে ছেড়ে যাব তাই আমি মডেলটিকে আরও বেশি সুযোগ দেব।
  4. verbose কী মুদ্রণ করবেন তা স্থির করে, এটি ডিফল্ট (0) এ রেখে দিন।
  5. 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। প্রারম্ভিক স্টপিং কলব্যাককে প্রতিটি যুগের দিকে ডাকা হয়, বর্তমানের সাথে সেরা নিরীক্ষিত মানটির তুলনা করা হয় এবং শর্তগুলি পূরণ করা বন্ধ হয়ে যায় (সেরা পর্যবেক্ষণকৃত মানটির পর্যবেক্ষণের পরে কত পর্বের অতীত হয়েছে এবং এটি ধৈর্য্যের যুক্তির চেয়ে আরও বেশি, পার্থক্য) সর্বশেষ মানটি মিনি_ডেলটা ইত্যাদির চেয়ে বড়))।

মন্তব্যগুলিতে @ ব্রেন্টফাস্টের নির্দেশ অনুসারে, মডেলটির প্রশিক্ষণ যতক্ষণ না প্রাথমিক স্টপিং শর্ত পূরণ হয় বা epochsপ্যারামিটার (ডিফল্ট = 10) fit()সন্তুষ্ট না হওয়া অবধি চালু থাকবে । আর্লি স্টপিং কলব্যাক সেট করা মডেলটিকে তার epochsপরামিতি ছাড়িয়ে প্রশিক্ষণ দেবে না । সুতরাং fit()বড় epochsমান সহ কলিং ফাংশন আর্লি স্টপিং কলব্যাক থেকে আরও উপকৃত হবে।


4
আইজউদ্দিনআজমান কাছাকাছি, নিরীক্ষিত min_deltaমান পরিবর্তনের হিসাবে মান পরিবর্তন করা উচিত কিনা তা একটি প্রান্তিক। হ্যাঁ, আমরা যদি তা দিয়ে থাকি monitor = 'val_loss'তবে এটি বর্তমান বৈধতা ক্ষতি এবং পূর্ববর্তী বৈধতা ক্ষতির মধ্যে পার্থক্য উল্লেখ করবে। অনুশীলনে, আপনি যদি min_delta=0.10.1 এর চেয়ে ছোট বৈধতা ক্ষতি (বর্তমান - পূর্ববর্তী) হ্রাস দেন তবে এই প্রশিক্ষণ বন্ধ করে দেবে (যদি আপনার থাকে patience = 0)।
উমুতো

4
লক্ষ্য করুন callbacks=[EarlyStopping(patience=2)], কোনো প্রভাব নেই যদি না সময়কাল দেওয়া হয় model.fit(..., epochs=max_epochs)
ব্রেন্ট ফাউস্ট

4
@ ব্রেন্টফাস্ট এটি আমার বোধগম্যতাও, আমি এই ধারণাটি নিয়ে উত্তরটি লিখেছি যে মডেলটি কমপক্ষে 10 টি যুগের সাথে প্রশিক্ষিত হচ্ছে (ডিফল্ট হিসাবে)। আপনার মন্তব্যের পরে, আমি বুঝতে পেরেছি যে প্রোগ্রামার একটি কেস epoch=1লুপে (বিভিন্ন ব্যবহারের ক্ষেত্রে) এই কলব্যাকটি ব্যর্থ হবে এমন কোনও ক্ষেত্রে উপযুক্ত হতে পারে। আমার উত্তরে যদি অস্পষ্টতা থাকে তবে আমি এটিকে আরও ভাল করে রাখার চেষ্টা করব।
umutto

4
@ অ্যাডমিরওয়াল যেহেতু আমি উত্তরটি লিখেছি, কোডটি কিছুটা পরিবর্তন হয়েছে। আপনি যদি কেরাসের সর্বশেষতম সংস্করণ ব্যবহার করছেন তবে আপনি restore_best_weightsযুক্তিটি (এখনও ডকুমেন্টেশনে নেই) ব্যবহার করতে পারেন , যা প্রশিক্ষণের পরে মডেলটিকে সর্বোত্তম ওজন সহ লোড করে। তবে, আপনার উদ্দেশ্যে আমি যুক্তি ModelCheckpointদিয়ে কলব্যাকটি ব্যবহার করব save_best_only। আপনি ডকুমেন্টেশন চেক করতে পারেন, এটি সরাসরি ব্যবহারের জন্য এগিয়ে তবে প্রশিক্ষণের পরে আপনাকে ম্যানুয়ালি সেরা ওজনগুলি লোড করতে হবে।
umutto

4
@ আমুতো হ্যালো ধন্যবাদ পুনরুদ্ধার_বেষ্ট_উইটসের পরামর্শের জন্য, তবে আমি এটি ব্যবহার করতে অক্ষম, `এসএস = আর্লিস্টপপিং (মনিটর = 'ভাল_এইসিসি), মিনি_ডেল্টা = 1 ই -4, ধৈর্য = ধৈর্য_, ভার্বোস = 1, পুনরুদ্ধার_বেষ্ট_উইটস = সত্য) টাইপ এরর: __init __ () একটি অপ্রত্যাশিত মূলশব্দ আর্গুমেন্ট 'পুনরুদ্ধার_বেষ্ট_উইট'স পেয়েছে ` কোন ধারনা? কেরাস ২.২.২, টিএফ, ১.১০ আপনার সংস্করণটি কী?
হারামোজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.