কীভাবে একটি গভীর শিক্ষার মডেলটিতে একটি নতুন বিভাগ যুক্ত করা যায়?


15

বলুন যে আমি 10 টি বস্তু সনাক্ত করতে প্রাক-প্রশিক্ষিত নেটওয়ার্কে স্থানান্তর শেখা করেছি। আমি ইতিমধ্যে প্রশিক্ষিত 10 টি বিভাগ বা মূল প্রাক-প্রশিক্ষিত মডেলটির তথ্য না হারিয়ে নেটওয়ার্ক কীভাবে শ্রেণিবদ্ধ করতে পারে এমন 11 তম আইটেম যুক্ত করবেন? একটি বন্ধু আমাকে বলেছিল যে এই ক্ষেত্রে সক্রিয় গবেষণা চলছে, তবে আমি কোনও প্রাসঙ্গিক কাগজপত্র বা একটি নাম খুঁজে পাচ্ছি না যার দ্বারা অনুসন্ধান করব?

ধন্যবাদ.


আপনি যদি আরও অনেক ক্লাস দিয়ে প্রশিক্ষণ দেন তবে কি আছে? এটা কি সাহায্য করতে পারে? উদাহরণস্বরূপ, আসুন আমরা বলি যে আপনি জানেন যে এখানে 1000 এর বেশি ক্লাস থাকবে না। আপনি আপনার ক্লাসিফায়ারটিকে শুরু থেকেই আপনার বর্তমান 10 টি ক্লাসে 1000 ক্লাস দিয়ে প্রশিক্ষণ দিন এবং যখন আপনার আরও ক্লাস হয় তখন তাদের উপর ট্রেনটি রেখে দিয়েছিলেন ... এটি কি ভাল সমাধান হতে পারে? এই পদ্ধতির বিষয়ে কোনও কাগজ রয়েছে?
মাইকেল

উত্তর:


13

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

এককালীন কেস

যদি এটি কেবল একবার হয় - আপনি 11 তম শ্রেণিটি ভুলে গেছেন, বা আপনার গ্রাহক তার মন পরিবর্তন করেছেন - তবে এটি আর ঘটবে না , তবে আপনি কেবল শেষ স্তরটিতে 11 তম আউটপুট নোড করতে পারেন। এ নোডের ওজন এলোমেলোভাবে শুরু করুন, তবে অন্যান্য আউটপুটগুলির জন্য ইতিমধ্যে আপনার ওজনগুলি ব্যবহার করুন। তারপরে, এটি যথারীতি প্রশিক্ষণ দিন। কিছু ওজন ঠিক করতে সহায়ক হতে পারে, এগুলি প্রশিক্ষণ দেবেন না।

একটি চূড়ান্ত ক্ষেত্রে কেবলমাত্র নতুন ওজনকে প্রশিক্ষণ দেওয়া এবং অন্য সকলকে স্থির রেখে দেওয়া। তবে আমি নিশ্চিত নই যে এটি ভালভাবে কাজ করবে কিনা - চেষ্টা করার মতো হতে পারে।

সামগ্রী-ভিত্তিক চিত্র পুনরুদ্ধার

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

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

এই জাতীয় বর্ণনাকারীর ভেক্টর শিখতে আপনি কীভাবে নিউরাল নেটওয়ার্ককে প্রশিক্ষণ দেন? এটি গবেষণার একটি সক্রিয় ক্ষেত্র। "চিত্র পুনরুদ্ধার" বা "মেট্রিক শেখার" মতো কীওয়ার্ডগুলি অনুসন্ধান করে আপনি সাম্প্রতিক কাজটি সন্ধান করতে পারেন।

এখনই লোকেরা সাধারণত প্রাক-প্রশিক্ষিত নেটওয়ার্ক নেয়, যেমন ভিজিজি -১ V, এফসি স্তরগুলি কেটে দেয় এবং চূড়ান্ত সমঝোতাটিকে আপনার বর্ণনাকারী ভেক্টর হিসাবে ব্যবহার করে। আপনি এই নেটওয়ার্কটি আরও প্রশিক্ষণ দিতে পারেন উদাহরণস্বরূপ ট্রিপলেট লোকসানের সাথে সামিয়াম নেটওয়ার্ক ব্যবহার করে।


আমি এক-শট শেখার দিকে তাকাচ্ছি। আপনি কি মনে করেন এটি আমাকে সাহায্য করতে পারে?
nnrales

আমি এক-শট শেখার বিষয়ে সত্যই জানি না। তবে আমি পেয়েছি যে এক-শট গভীর শেখার কাগজপত্রগুলি সিবিআইআর পদ্ধতির সাথে বেশ অনুরূপ, তাই এটি অবশ্যই আপনার পক্ষে কার্যকর হতে পারে
hdaderts

2

আপনার নেটওয়ার্ক টপোলজিটি দেখতে অন্যরকম হতে পারে তবে খুব শেষের দিকে আপনার প্রাক-প্রশিক্ষিত নেটওয়ার্কের একটি স্তর রয়েছে যা 10 টি মূল শ্রেণীর স্বীকৃতি পরিচালনা করে। ১১ তম, দ্বাদশ শ্রেণি নবম শ্রেণি চালু করার সবচেয়ে সহজ (এবং কার্যকারী) কৌশলটি হ'ল শেষের আগে সমস্ত স্তর ব্যবহার করা এবং অতিরিক্ত স্তর (একটি নতুন মডেল বা সমান্তরাল হিসাবে) যুক্ত করাও যেটি বসবে সর্বশেষ স্তরগুলির শীর্ষে, 10 ক্লাস স্তর (যা সম্ভবত ঘন স্তরের ম্যাটমুল এবং optionচ্ছিক [len(dense layer), 10]পক্ষপাত সহ আকারের একটি ম্যাট্রিক্স ) একই রকম দেখতে পাবেন।

আপনার নতুন স্তরটি আকৃতির একটি ম্যাটমুল স্তর হবে [len(dense layer), len(new classes)]

মূল প্রশিক্ষণের ডেটা অ্যাক্সেস না করে আপনার কাছে দুটি বিকল্প থাকবে:

  1. "নতুন" মডেলটিকে কেবলমাত্র নতুন ওজনকেই অনুকূলিতকরণের অনুমতি দিয়ে সমস্ত স্তরের মূল স্তরগুলিতে স্থির করুন। এটি আপনাকে মূল 10 ক্লাসের জন্য ঠিক একই ভবিষ্যদ্বাণীপূর্ণ শক্তি দেবে এবং নতুনদের জন্য ঠিক পারফরম্যান্স দিতে পারে।
  2. একবারে পুরো নেটওয়ার্ককে প্রশিক্ষণ দিন (নতুন শ্রেণীর ত্রুটি প্রচার করে), যা নতুন শ্রেণীর (এস) এর পক্ষে কাজ করে যাচ্ছেন, তবে আপনি 10 ক্লাসের অকার্যকর মূল সমাধানটি শেষ করবেন (যেহেতু নিম্ন শ্রেণীর এবং চূড়ান্ত স্তরটির জন্য ওজন পরিবর্তন করা হবে) এই পরিবর্তনগুলি মেলে আপডেট করা হবে না)।

যদিও, আপনাকে আসল প্রশিক্ষণের ডেটাতে অ্যাক্সেস দেওয়া আছে, আপনি সহজেই মূল নেটওয়ার্কে নতুন ক্লাস যুক্ত করতে পারেন এবং বাক্সের বাইরে 11 টি ক্লাস সমর্থন করার জন্য এটি পুনরায় প্রশিক্ষণ দিতে পারেন।


2

এটি সহজেই করা যায়।

প্রথমে সেই 10 টি ক্লাসের সাথে একটি মডেল তৈরি করুন এবং মডেলটি বেস_ মডেল হিসাবে সংরক্ষণ করুন।

বেস_ মডেলটি লোড করুন এবং নতুন_ মডেল নামে একটি নতুন মডেল হিসাবে সংজ্ঞায়িত করুন-

new_model = Sequential()

তারপরে বেস_মোডেলের স্তরগুলি নতুন_মডালে যুক্ত করুন -

# getting all the layers except the last two layers
for layer in base_model.layers[:-2]: #just exclude the last two layers from base_model
    new_model.add(layer)

আপনি চান না যে আপনার মডেলটি আবার প্রশিক্ষিত হোক আপনি নতুন মডেলের স্তরগুলিকে অ প্রশিক্ষণযোগ্য করে তুলুন।

# prevent the already trained layers from being trained again
for layer in new_model.layers:
    layer.trainable = False

এখন আপনি শেখার স্থানান্তর করার সময়, আপনি শেষ স্তরগুলি সরিয়ে ফেললে, মডেল ধরণের 10 ক্লাস সম্পর্কে ভুলে যায় তাই বেস_মোডেলের ওজনকে নতুন_মডালে ধরে রাখতে হবে -

weights_training = base_model.layers[-2].get_weights()
new_model.layers[-2].set_weights(weights_training) 

এখন শেষে একটি ঘন স্তর যুক্ত করুন এবং আমরা এই উদাহরণে কেবল এই ঘন স্তরটিকে প্রশিক্ষণ দেব।

new_model.add(Dense(CLASSES, name = 'new_Dense', activation = 'softmax'))

এখন মডেলটিকে প্রশিক্ষণ দিন এবং আমি আশা করি এটি 11 টি শ্রেণীর জন্য সঠিক আউটপুট দেয়।

হ্যাপি লার্নিং

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.