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