গভীর শিক্ষার জন্য ইমেজ ডেটা অগমেন্টেশন

আপনার গভীর শিক্ষার প্রকল্পগুলির জন্য কেরাস ব্যবহার করে ইমেজ ডেটা অগমেন্টেশন কী এবং কীভাবে এটি ব্যবহার করবেন তা বুঝুন

দ্বারা ফোটো ক্রিস লটন on Unsplash

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

সৌভাগ্যবশত, এমন কৌশল রয়েছে যা আপনি ইমেজ ডেটাসেটের পরিপূরক করতে ব্যবহার করতে পারেন যা তারা প্রশিক্ষণের জন্য ব্যবহার করে। এক কৌশল বলা হয় ইমেজ ডেটা পরিবর্ধন. এই প্রবন্ধে, আমি আলোচনা করব ইমেজ ডেটা অগমেন্টেশন কী, এটি কীভাবে কাজ করে, কেন এটি গভীর শিক্ষায় উপযোগী, এবং অবশেষে কেরাস লাইব্রেরি ব্যবহার করে কীভাবে চিত্র ডেটা বৃদ্ধি করা যায়।

চিত্র তথ্য বৃদ্ধি একটি কৌশল যে বিদ্যমান থেকে নতুন ছবি তৈরি করে. এটি করার জন্য, আপনি তাদের মধ্যে কিছু ছোট পরিবর্তন করুন, যেমন চিত্রের উজ্জ্বলতা সামঞ্জস্য করা, বা চিত্রটি ঘোরানো, বা চিত্রের বিষয়কে অনুভূমিকভাবে বা উল্লম্বভাবে স্থানান্তর করা।

ইমেজ অগমেন্টেশন কৌশলগুলি আপনাকে আপনার প্রশিক্ষণ সেটের আকার কৃত্রিমভাবে বৃদ্ধি করতে দেয়, যার ফলে প্রশিক্ষণের জন্য আপনার মডেলকে আরও অনেক তথ্য সরবরাহ করে। এটি আপনাকে আপনার প্রশিক্ষণ ডেটার নতুন বৈকল্পিক চিনতে আপনার মডেলের ক্ষমতা বৃদ্ধি করে আপনার মডেলের নির্ভুলতা উন্নত করতে দেয়।

ইমেজ ডেটা অগমেন্টেশনের ধরন

ইমেজ অগমেন্টেশন অনেক রূপে আসে, এখানে কিছু সাধারণ রয়েছে — উল্লম্ব স্থানান্তর, অনুভূমিক স্থানান্তর, উল্লম্ব ফ্লিপ, অনুভূমিক ফ্লিপ, ঘূর্ণন, উজ্জ্বলতা সমন্বয় এবং জুম ইন/আউট।

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

একবার Anaconda এবং TensorFlow ইনস্টল হয়ে গেলে, একটি নতুন জুপিটার নোটবুক তৈরি করুন।

উল্লম্ব শিফট

প্রথম ইমেজ অগমেন্টেশন টেকনিক যা আমি দেখাতে চাই উল্লম্ব স্থানান্তর. দ্য উল্লম্ব স্থানান্তর এলোমেলোভাবে চিত্রটিকে উল্লম্বভাবে উপরে বা নীচে স্থানান্তরিত করে। এই উদাহরণের জন্য, আমি নামের একটি ইমেজ ব্যবহার করতে যাচ্ছি 747.jpg, আমার জুপিটার নোটবুকের মতো একই ফোল্ডারে অবস্থিত।

চিত্র উৎস: https://commons.wikimedia.org/wiki/File:Qantas_Boeing_747-438ER_VH-OEI_at_LAX.jpg. এই ফাইলের অধীনে লাইসেন্স করা হয় ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন-শেয়ার অ্যালাইক ২.০ জেনেরিক লাইসেন্স.

নিম্নলিখিত কোড স্নিপেট ব্যবহার করে ImageDataGenerator উল্লম্বভাবে ইমেজ স্থানান্তর করতে কেরাসে ক্লাস।

সার্জারির ImageDataGenerator কেরাস থেকে ক্লাস রিয়েল-টাইম ডেটা অগমেন্টেশন সহ ইমেজ ডেটার ব্যাচ তৈরি করে।

#---মডিউল আমদানি করুন---
এনপি হিসাবে নাম্বার আমদানি করুন
matplotlib.pyplot plt হিসাবে আমদানি করুন
tensorflow.keras.preprocessing.image import load_img থেকে
tensorflow.keras.preprocessing.image img_to_array থেকে আমদানি করুন
tensorflow.keras.preprocessing.image থেকে ImageDataGenerator আমদানি করুন
#---ছবি লোড করুন---
image_filename = '747.jpg'
img = load_img(ছবি_ফাইলের নাম)
#--- ছবিটিকে 3D অ্যারেতে রূপান্তর করুন---
ইমেজ_ডেটা = img_to_array(img)
#--- 4D অ্যারের প্রতিনিধিত্বকারী 1 উপাদানের একটি 3-D অ্যারেতে রূপান্তর করুন
#ছবি---
images_data = np.expand_dims(ছবি_ডেটা, অক্ষ=0)
#---ইমেজ ডেটা অগমেন্টেশন জেনারেটর তৈরি করুন---
ডেটাজেন = ইমেজডেটা জেনারেটর(প্রস্থ_শিফট_রেঞ্জ=0.2)
#--- পুনরাবৃত্তিকারী প্রস্তুত করুন; flow() একটি 4D অ্যারে নেয় এবং রিটার্ন করে
# একটি ইটারেটর যাতে এক ব্যাচ চিত্র রয়েছে---
train_generator = datagen.flow(images_data, batch_size=1)
সারি = 5
কলাম = 4
#--- প্লট 5 সারি এবং 4 কলাম---
ডুমুর, অক্ষ = plt.সাবপ্লট(সারি, কলাম)
পরিসরে r এর জন্য (সারি):
পরিসরে c এর জন্য (কলাম):
#--- ব্যাচের পরবর্তী চিত্রটি পান (ব্যাচের পর থেকে একটি চিত্র
# আকার হল 1)---
image_batch = train_generator.next()

#---দেখার জন্য স্বাক্ষরবিহীন পূর্ণসংখ্যাতে রূপান্তর করুন---
image = image_batch[0].astype('uint8')

#---ছবি দেখাও---
axes[r,c].imshow(ছবি)
#---চিত্রের আকার নির্ধারণ করুন---
fig.set_size_inches(15,10)

উপরের কোড স্নিপেট নিম্নলিখিত আউটপুট উত্পাদন করে:

আপনি উপরের আউটপুট থেকে দেখতে পাচ্ছেন, আপনি প্রতিবার কল করার সময় next() থেকে পদ্ধতি train_generator অবজেক্ট, আপনি একটি চিত্র পাবেন যা সামান্য পরিবর্তিত হয়েছে। উপরের কোড স্নিপেটে, একটি নতুন চিত্র যা তার আসল চিত্রের উচ্চতার উপর ভিত্তি করে 20% স্থানান্তরিত হয় যখন আপনি কল করেন next() পদ্ধতি:

ডেটাজেন = ইমেজডেটা জেনারেটর(width_shift_range=0.2)

মজার ব্যাপার হল, এই সংস্করণের জন্য ImageDataGenerator (tensorflow.keras.preprocessing.image) শ্রেণী, নির্দিষ্ট করে width_shift_range প্যারামিটার অনুভূমিকভাবে পরিবর্তে চিত্রটিকে উল্লম্বভাবে স্থানান্তরিত করে (যা পুরোনোদের আচরণImageDataGeneratorথেকে keras.preprocessing.image মডিউল)। একইভাবে, আপনি যদি ছবিটি অনুভূমিকভাবে স্থানান্তরিত করতে চান তবে আপনাকে ব্যবহার করতে হবে height_shift_range পরামিতি (পরবর্তী বিভাগ দেখুন)।

উল্লেখ্য যে next() পদ্ধতি আপনি যতবার চান ততবার একটি বর্ধিত চিত্র ফিরিয়ে দেবে। উপরের কোড স্নিপেটে, আমরা এটিকে 20 বার বলেছি (5 সারি বার 4 কলাম)।

অনুভূমিক স্থানান্তর

আপনি এখন ব্যবহার করে চিত্রটিকে অনুভূমিকভাবে স্থানান্তর করার চেষ্টা করতে পারেন height_shift_range পরামিতি:

ডেটাজেন = ইমেজডেটা জেনারেটর(height_shift_range=0.2)
train_generator = datagen.flow(images_data, batch_size=1)
সারি = 5
কলাম = 4
ডুমুর, অক্ষ = plt.সাবপ্লট(সারি, কলাম)
পরিসরে r এর জন্য (সারি):
পরিসরে c এর জন্য (কলাম):
image_batch = train_generator.next()
image = image_batch[0].astype('uint8')
axes[r,c].imshow(ছবি)
fig.set_size_inches(15,10)

উপরের কোড স্নিপেট নিম্নলিখিত আউটপুট উত্পাদন করে:

অনুভূমিক উল্টানো

কখনও কখনও এটি অনুভূমিকভাবে ইমেজ উল্টানো বোধগম্য করে তোলে। একটি বিমানের ক্ষেত্রে, প্লেনের সামনের দিকটি বাম দিকে বা ডান দিকে হতে পারে:

ডেটাজেন = ইমেজডেটা জেনারেটর(horizontal_flip=True)
train_generator = datagen.flow(images_data, batch_size=1)
সারি = 2
কলাম = 2
ডুমুর, অক্ষ = plt.সাবপ্লট(সারি, কলাম)
পরিসরে r এর জন্য (সারি):
পরিসরে c এর জন্য (কলাম):
image_batch = train_generator.next()
image = image_batch[0].astype('uint8')
axes[r,c].imshow(ছবি)
fig.set_size_inches(15,10)

উপরের কোড স্নিপেটের জন্য, চারটি ছবি তৈরি করা যথেষ্ট ভাল কারণ বিমানের সামনের অংশটি হয় বাম বা ডান দিকে হতে পারে:

মনে রাখবেন যে ফ্লিপিং এলোমেলো (কখনও কখনও আপনি সমস্ত চারটি আসল চিত্র পান এবং কখনও কখনও আপনি অনুভূমিকভাবে উল্টানো চিত্রগুলি পান)। সম্ভবত উপরের চারটি ছবি একই হতে পারে। যদি এটি ঘটে, তবে কোডের সেই ব্লকটি আবার চালান।

উল্লম্ব উল্টানো

অনুভূমিক ফ্লিপিংয়ের মতো, আপনি উল্লম্ব ফ্লিপিংও করতে পারেন:

ডেটাজেন = ইমেজডেটা জেনারেটর(vertical_flip=সত্য)
train_generator = datagen.flow(images_data, batch_size=1)
সারি = 2
কলাম = 2
ডুমুর, অক্ষ = plt.সাবপ্লট(সারি, কলাম)
পরিসরে r এর জন্য (সারি):
পরিসরে c এর জন্য (কলাম):
image_batch = train_generator.next()
image = image_batch[0].astype('uint8')
axes[r,c].imshow(ছবি)
fig.set_size_inches(15,10)

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

ঘূর্ণন

ঘূর্ণন, নাম থেকে বোঝা যায়, আপনার ইমেজ ঘোরানো. এটি আমাদের বিমানের চিত্রের জন্য খুব দরকারী হবে। নিম্নলিখিত কোড স্নিপেটগুলি এলোমেলোভাবে চিত্রটিকে 50 ডিগ্রি পর্যন্ত ঘোরায়:

ডেটাজেন = ইমেজডেটা জেনারেটর(ঘূর্ণন_পরিসীমা = 50)
train_generator = datagen.flow(images_data)
সারি = 5
কলাম = 4
ডুমুর, অক্ষ = plt.সাবপ্লট(সারি, কলাম)
পরিসরে r এর জন্য (সারি):
পরিসরে c এর জন্য (কলাম):
image_batch = train_generator.next()
image = image_batch[0].astype('uint8')
axes[r,c].imshow(ছবি)
fig.set_size_inches(15,10)

ঘূর্ণনের সাথে, আউটপুট বিমানগুলিকে বিভিন্ন অবস্থানে দেখায় — টেক অফ এবং ল্যান্ডিং পজিশন অনুকরণ করে:

উজ্জ্বলতা

আরেকটি বর্ধন কৌশল হল ছবির উজ্জ্বলতা সামঞ্জস্য করা। নিম্নলিখিত কোড স্নিপেট উজ্জ্বলতা স্থানান্তর মানগুলির একটি পরিসীমা সেট করে:

ডেটাজেন = ইমেজডেটা জেনারেটর(উজ্জ্বলতা_পরিসীমা=[0.15,2.0])
train_generator = datagen.flow(images_data, batch_size=1)
সারি = 5
কলাম = 4
ডুমুর, অক্ষ = plt.সাবপ্লট(সারি, কলাম)
পরিসরে r এর জন্য (সারি):
পরিসরে c এর জন্য (কলাম):
image_batch = train_generator.next()
image = image_batch[0].astype('uint8')
axes[r,c].imshow(ছবি)
fig.set_size_inches(15,10)

আউটপুটে বিভিন্ন উজ্জ্বলতার একটি সিরিজ রয়েছে:

জুম বাড়ানো

এছাড়াও আপনি ছবি জুম ইন বা আউট করতে পারেন:

ডেটাজেন = ইমেজডেটা জেনারেটর(জুম_রেঞ্জ=[5,0.5])
train_generator = datagen.flow(images_data, batch_size=1)
সারি = 5
কলাম = 4
ডুমুর, অক্ষ = plt.সাবপ্লট(সারি, কলাম)
পরিসরে r এর জন্য (সারি):
পরিসরে c এর জন্য (কলাম):
image_batch = train_generator.next()
image = image_batch[0].astype('uint8')
axes[r,c].imshow(ছবি)
fig.set_size_inches(15,10)

আউটপুট বিভিন্ন জুম অনুপাতের চিত্রটি দেখায়:

মনে রাখবেন যে ছবিগুলি জুম করা ছবিগুলির আকৃতির অনুপাতকে পরিবর্তন করবে।

সব augmentations সমন্বয়

অবশ্যই, আমি এ পর্যন্ত আলোচনা করেছি এমন সমস্ত বিভিন্ন বৃদ্ধির কৌশল একত্রিত করা যেতে পারে:

ডেটাজেন = ইমেজডেটা জেনারেটর(width_shift_range=0.2,
height_shift_range=0.2,
অনুভূমিক_ফ্লিপ = সত্য,
ঘূর্ণন_পরিসীমা=50,
উজ্জ্বলতা_পরিসীমা=[0.15,2.0],
জুম_রেঞ্জ=[5,0.5]
)
train_generator = datagen.flow(images_data, batch_size=1)সারি = 8
কলাম = 8
ডুমুর, অক্ষ = plt.সাবপ্লট(সারি, কলাম)
পরিসরে r এর জন্য (সারি):
পরিসরে c এর জন্য (কলাম):
image_batch = train_generator.next()
image = image_batch[0].astype('uint8')
axes[r,c].imshow(ছবি)
fig.set_size_inches(15,10)

মনে রাখবেন যে আমি উল্লম্ব ফ্লিপ ছেড়ে দিয়েছি কারণ এটি আমাদের উদাহরণের জন্য অর্থপূর্ণ নয়।

আউটপুট এখন বিভিন্ন বর্ধন প্রয়োগের সাথে চিত্রটি দেখায়:

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

ফল
|__কলা
|__banana1.jpg
|__banana2.jpg
|__banana3.jpg
|__...
|__দুরিয়ান
|__durian1.jpg
|__durian2.jpg
|__durian3.jpg
|__...
|__কমলা
|__orange1.jpg
|__orange2.jpg
|__orange3.jpg
|__...
|__স্ট্রবেরি
|__strawberry1.jpg
|__strawberry2.jpg
|__strawberry3.jpg
|__...

প্রতিটি সাবফোল্ডারে ছবির একটি সেট রয়েছে। উদাহরণস্বরূপ, দ কলা ফোল্ডার নামক ইমেজ একটি সংখ্যা রয়েছে banana1.jpg, banana2.jpg, এবং তাই. সাবফোল্ডারগুলির নাম বিভিন্ন চিত্রের লেবেল হিসাবে কাজ করবে। এর মানে হল যে সমস্ত ফাইলের অধীনে কলা ফোল্ডারে কলার ছবি রয়েছে এবং আরও অনেক কিছু।

ডিস্ক থেকে ছবির একটি সিরিজ লোড করতে, আপনি এখন কল করুন flow_from_directory() পদ্ধতি ImageDataGenerator এর পরিবর্তে উদাহরণ flow() পদ্ধতি (মেমরি থেকে ছবি লোড করার জন্য):

ট্রেন_ডেটাজেন = ইমেজডেটা জেনারেটর(
অনুভূমিক_ফ্লিপ = সত্য,
vertical_flip=সত্য,
ঘূর্ণন_পরিসীমা=50,
)
ব্যাচ_সাইজ = 8ট্রেন_জেনারেটর = train_datagen.flow_from_directory(
'./ফল',
লক্ষ্য_আকার=(224,224),
color_mode='rgb',
ব্যাচ_সাইজ=ব্যাচ_সাইজ,
class_mode='শ্রেণীগত',
এলোমেলো = সত্য)

আমি এখন সেট যে পর্যবেক্ষণ batch_size আপনি শীঘ্রই ব্যাচ আকার ব্যবহার দেখতে পাবেন.

ফিরে আসা পুনরাবৃত্তিকারী ব্যবহার করে, আমি বিভিন্ন ফলের (কলা, ডুরিয়ান, কমলা এবং স্ট্রবেরি) লেবেলগুলি খুঁজে পেতে পারি:

class_dictionary = train_generator.class_index#---লেবেলের একটি অভিধান তৈরি করুন---
class_dictionary = { value: key এর জন্য key, value in
class_dictionary.items()}
#--- অভিধানকে একটি তালিকায় রূপান্তর করুন---
class_list = [_ এর মান, class_dictionary.items() এ মান]
মুদ্রণ(শ্রেণী_তালিকা)

আপনি নিম্নলিখিত আউটপুট দেখতে পাবেন:

54টি ক্লাসের 4টি ছবি পাওয়া গেছে।
['কলা', 'ডুরিয়ান', 'কমলা', 'স্ট্রবেরি']

সব মিলিয়ে ৪টি ফোল্ডারে মোট ৫৪টি ছবি রয়েছে। এছাড়াও class_list পরিবর্তনশীল ফলের তালিকা রয়েছে।

আমি এখন অগমেন্টেড ইমেজের সেট মুদ্রণ করব যা দ্বারা তৈরি করা হয়েছে ImageDataGenerator ক্লাস আমি ইচ্ছামত সারিগুলি 10 এ সেট করব, এবং প্রতিটি সারির জন্য, আমি ফিরে আসা চিত্রগুলির ব্যাচ প্রিন্ট করতে চাই (যা এই উদাহরণে 8):

সারি = 10ডুমুর, অক্ষ = plt.সাবপ্লট (সারি, ব্যাচ_সাইজ)পরিসরে r এর জন্য (সারি):    
#---অগমেন্টেড ইমেজের ব্যাচ পান---
image_batch = train_generator.next()
#--- ফেরত দেওয়া ছবির সংখ্যা পান---
images_count = image_batch[0].shape[0]

পরিসরে c এর জন্য(ছবি_গণনা):
#---দেখার জন্য স্বাক্ষরবিহীন পূর্ণসংখ্যাতে রূপান্তর করুন---
image = image_batch[0][c].astype('uint8')

#---ছবি দেখান---
axes[r,c].imshow(ছবি)

#---চিত্রের লেবেল প্রদর্শন করুন---
axes[r,c].title.set_text(
class_list[np.argmax(image_batch[1][c])])
#---এক্স এবং ওয়াই-টিক লুকিয়ে রাখে---
axes[r,c].set_xticks([])
axes[r,c].set_yticks([])
fig.set_size_inches(15,18)

যেহেতু batch_size এখন 8 সেট করা হয়েছে (এবং আর 1 নয়), train_generator.next() পদ্ধতি আপনাকে একটি ফেরত দেবে দল আপনি এটি কল প্রতিবার আট বর্ধিত ইমেজ. ফিরে আসা ছবির সংখ্যা উপর ভিত্তি করে batch_size যে আপনি আগে সেট flow_from_directory() পদ্ধতি:

train_generator = train_datagen.flow_from_directory(
'./ফল',
লক্ষ্য_আকার=(224,224),
color_mode='rgb',
ব্যাচ_সাইজ=ব্যাচ_সাইজ, # ব্যাচ_সাইজ = 8
class_mode='শ্রেণীগত',
এলোমেলো = সত্য)

এর মূল্য image_batch পরিবর্তনশীল ( দ্বারা প্রত্যাবর্তিত next() পদ্ধতি) দুটি উপাদানের একটি টিপল:

  • প্রথম উপাদান (image_batch[0]) এর একটি অ্যারে ব্যাচ আকার ছবি (4D অ্যারে)
  • দ্বিতীয় উপাদান (image_batch[1]) ছবির জন্য লেবেল রয়েছে

উপরের কোড স্নিপেট নিম্নলিখিত আউটপুট উত্পাদন করে:

লক্ষ্য করুন যে সপ্তম সারিতে, কোন ছবি ছাড়া দুটি খালি চার্ট আছে। মনে রাখবেন যে ইমেজ সেটে মোট 54টি ছবি রয়েছে এবং যেহেতু প্রতিটি ব্যাচ 8টি ছবি (প্রতি সারিতে) প্রদান করে, তাই প্রথম সাতটি সারি মোট 54টি ছবি (8×6 + 6) প্রদর্শন করবে। নিম্নলিখিত চিত্র এটি পরিষ্কার করে:

উল্লেখ্য যে আপনি সেট করতে পারেন rows যে কোন সংখ্যা এবং ImageDataGenerator ক্লাস আপনার জন্য নতুন বর্ধিত চিত্র তৈরি করতে থাকবে।

ট্রান্সফার লার্নিং ব্যবহার করে একটি মডেল তৈরি করা

আপনি এখন কিভাবে ব্যবহার করতে জানেন ImageDataGenerator পরিবর্ধনের জন্য ডিস্ক থেকে ছবির সেট লোড করতে। কিন্তু আপনি কিভাবে প্রশিক্ষণের জন্য এটি ব্যবহার করবেন? নিম্নলিখিত কোড স্নিপেট দেখায় কিভাবে ব্যবহার করে একটি গভীর শিক্ষার মডেল তৈরি করা যায় প্রশিক্ষণ স্থানান্তর.

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

tensorflow.keras.models থেকে মডেল আমদানি করুন
tensorflow.keras.applications থেকে VGG16 আমদানি করে
tensorflow.keras.layers থেকে ঘন, GlobalAveragePooling2D আমদানি করে
#---ফলের সংখ্যা---
NO_CLASSES = সর্বোচ্চ(train_generator.class_indices.values()) + 1
#--- প্রশিক্ষণের জন্য ভিজিজি 16 মডেলটিকে বেস মডেল হিসাবে লোড করুন---
বেস_মডেল = VGG16(include_top=False, input_shape=(224, 224, 3))
#---আমাদের নিজস্ব স্তর যোগ করুন---
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024,activation='relu')(x) # ঘন স্তর যোগ করুন তাই
# যে মডেল পারে
# আরও জটিল শিখুন
# ফাংশন এবং
# ভালোর জন্য শ্রেণীবদ্ধ করুন
#টি ফলাফল।
x = ঘন (1024, সক্রিয়করণ='relu')(x) # ঘন স্তর 2
x = ঘন(512,activation='relu')(x) # ঘন স্তর 3
preds = ঘন (NO_CLASSES,
সক্রিয়করণ='softmax')(x) # এর সাথে চূড়ান্ত স্তর
# সফটম্যাক্স সক্রিয়করণ
#--- বেস মডেলের মূল দিয়ে একটি নতুন মডেল তৈরি করুন
# ইনপুট এবং নতুন মডেলের আউটপুট---
মডেল = মডেল(ইনপুট = base_model.input, outputs = preds)
#---প্রথম 19টি স্তর প্রশিক্ষণ দেবেন না - 0..18---
model.layers[:19] এ স্তরের জন্য:
layer.trainable= মিথ্যা
#---বাকী স্তরগুলিকে প্রশিক্ষণ দিন - 19 এর পর---
মডেলের স্তরের জন্য [19:]:
layer.trainable=সত্য

#---মডেল কম্পাইল করুন---
model.compile(অপ্টিমাইজার='আডাম',
loss='categorical_crossentropy',
মেট্রিক্স=['নির্ভুলতা'])

ট্রান্সফার লার্নিং কীভাবে কাজ করে তা ব্যাখ্যা করা এই নিবন্ধের সুযোগের বাইরে। আমি এটি অন্য নিবন্ধের জন্য ছেড়ে দেব।

প্রশিক্ষণের জন্য উত্পন্ন ইমেজ ব্যবহার করে

প্রশিক্ষণের জন্য বর্ধিত চিত্রগুলি ব্যবহার করতে, পাস করুন৷ train_generator মধ্যে fit() মডেলের পদ্ধতি:

#---মডেলকে প্রশিক্ষণ দিন---
step_size_train = train_generator.n // train_generator.batch_size
model.fit(ট্রেন_জেনারেটর,
steps_per_epoch=step_size_train,
যুগ=15)

সার্জারির steps_per_epoch প্যারামিটারের অর্থ মূলত একটি যুগে কতগুলি ধাপ রয়েছে — এটি আপনার কাছে থাকা চিত্রের সংখ্যা এবং আগে সংজ্ঞায়িত ব্যাচের আকারের উপর নির্ভর করে। আপনি যদি এটি একটি উচ্চ নম্বরে সেট করেন, তাহলে আপনি পুনরাবৃত্তিমূলক প্রশিক্ষণ করছেন। আপনি এই সূত্রের উপর ভিত্তি করে এটি সেট করা উচিত:

ছবির সংখ্যা / ব্যাচ আকার

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

সার্জারির ImageDataGenerator ক্লাস আপনার মডেলকে প্রতিটি যুগে ইমেজের নতুন বৈচিত্র পেতে দেয়। কিন্তু মনে রাখবেন যে এটি শুধুমাত্র রূপান্তরিত চিত্রগুলি ফেরত দেয় এবং এটি আপনার কাছে থাকা চিত্রগুলির সেটে যোগ করে না।

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

https://towardsdatascience.com/feed এর মাধ্যমে গভীর শিক্ষার জন্য ইমেজ ডেটা অগমেন্টেশন উৎস https://towardsdatascience.com/image-data-augmentation-for-deep-learning-77a87fabd2bf?source=rss—-7f60cf5620c9—4 থেকে পুনঃপ্রকাশিত

<!–

->

সময় স্ট্যাম্প:

থেকে আরো ব্লকচেইন পরামর্শদাতা