কেরাসে আর্লি স্টপিং কলব্যাক দ্বারা ব্যবহৃত মেট্রিকটি পরিবর্তন করার কি কোনও উপায় নেই?


13

কেরাসের আর্লি স্টপিং কলব্যাক ব্যবহার করার সময় যখন কিছু মেট্রিক (সাধারণত বৈধতা হ্রাস) বৃদ্ধি না পায় তখন প্রশিক্ষণ বন্ধ হয়। বৈধতা ক্ষতির পরিবর্তে অন্য কোনও মেট্রিক (যেমন নির্ভুলতা, পুনর্সারণ, চ-পরিমাপ) ব্যবহার করার কোনও উপায় আছে? আমি এখন পর্যন্ত যে সমস্ত উদাহরণ দেখেছি তা এইগুলির সাথে সমান: কলব্যাক্স Eআরলিস্টপ্পিং (মনিটর = 'ভাল_লস', ধৈর্য = 5, ভার্বোজ = 0, মোড = 'অটো')

উত্তর:


11

মডেলটি সংকলনের সময় আপনি নির্দিষ্ট যে কোনও মেট্রিক ফাংশন ব্যবহার করতে পারেন।

ধরা যাক আপনার নিম্নলিখিত মেট্রিক ফাংশন রয়েছে:

def my_metric(y_true, y_pred):
     return some_metric_computation(y_true, y_pred)

এই ফাংশনটির একমাত্র প্রয়োজন হ'ল এটি সত্য y এবং পূর্বাভাস y গ্রহণ করে।

আপনি যখন মডেলটি সংকলন করেন, আপনি এই মেট্রিকটি নির্দিষ্ট করেন যেমন আপনি কীভাবে 'যথার্থতা' এর মতো মেট্রিকগুলিতে বিল্ড নির্দিষ্ট করেন:

model.compile(metrics=['accuracy', my_metric], ...)

লক্ষ্য করুন যে আমরা '' ছাড়াই মাই_মেট্রিক ফাংশনটি ব্যবহার করছি ('যথাযথতা তৈরির বিপরীতে)'।

তারপরে, আপনি যদি আপনার আর্লিস্টপিং সংজ্ঞায়িত করেন তবে কেবলমাত্র ফাংশনের নামটি ব্যবহার করুন (এবার '' দিয়ে):

EarlyStopping(monitor='my_metric', mode='min')

মোডটি নির্দিষ্ট করে নিন (মিনিট কম হলে ভাল হয়, বেশি হলে উচ্চতর হবে) নির্দিষ্ট করুন।

আপনি এটি কোনও বিল্ট-ইন মেট্রিকের মতোই ব্যবহার করতে পারেন। এটি সম্ভবত অন্যান্য মডেলচেকপয়েন্টের মতো কলব্যাকগুলির সাথেও কাজ করে (তবে আমি এটি পরীক্ষা করি নি)। অভ্যন্তরীণভাবে কেরাস কেবলমাত্র ফাংশনটির নাম ব্যবহার করে এই মডেলটির জন্য উপলব্ধ মেট্রিকগুলির তালিকায় নতুন মেট্রিক যুক্ত করে।

আপনি যদি আপনার মডেল.ফিট (...) এ বৈধতার জন্য ডেটা নির্দিষ্ট করে থাকেন তবে আপনি 'ভ্যাল_মি_মেট্রিক' ব্যবহার করে এটি আর্লিস্টপিংয়ের জন্যও ব্যবহার করতে পারেন।


3

অবশ্যই, আপনার নিজের তৈরি করুন!

class EarlyStopByF1(keras.callbacks.Callback):
    def __init__(self, value = 0, verbose = 0):
        super(keras.callbacks.Callback, self).__init__()
        self.value = value
        self.verbose = verbose


    def on_epoch_end(self, epoch, logs={}):
         predict = np.asarray(self.model.predict(self.validation_data[0]))
         target = self.validation_data[1]
         score = f1_score(target, prediction)
         if score > self.value:
            if self.verbose >0:
                print("Epoch %05d: early stopping Threshold" % epoch)
            self.model.stop_training = True


callbacks = [EarlyStopByF1(value = .90, verbose =1)]
model.fit(X, y, batch_size = 32, nb_epoch=nb_epoch, verbose = 1, 
validation_data(X_val,y_val), callbacks=callbacks)

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


+1 এখনও সর্বশেষ কেরাস এবং পাইথন 3.7 ব্যবহার করে 2/11/2020 পর্যন্ত কাজ করে
অস্টিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.