টেনসরফ্লো ইমেজ শ্রেণিবদ্ধকরণ: বিল্ডিং ক্লাসিফায়ারগুলি সম্পর্কে আপনার যা জানা দরকার

এই টেনসরফ্লো ইমেজ শ্রেণিবদ্ধকরণ নিবন্ধটি আপনাকে চিত্রের শ্রেণিবদ্ধকরণের একটি বিশদ এবং বিস্তৃত জ্ঞাতলাভ সরবরাহ করবে।

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



টেনসরফ্লো কী?

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

TensorFlow-Image-Recognition
টেনারগুলি কেবলমাত্র বহুমাত্রিক অ্যারে, উচ্চ মাত্রা সহ ডেটাতে 2-মাত্রিক টেবিলগুলির বর্ধন। টেনসরফ্লোয়ের অনেকগুলি বৈশিষ্ট্য রয়েছে যা এটি ডিপ লার্নিংয়ের জন্য উপযুক্ত করে তোলে এবং এটির মূল ওপেন সোর্স লাইব্রেরি আপনাকে এমএল মডেলগুলি বিকাশ এবং প্রশিক্ষণে সহায়তা করে।

চিত্রের শ্রেণিবিন্যাস কী?

চিত্র শ্রেণিবদ্ধকরণের উদ্দেশ্যটি হ'ল ডিজিটাল চিত্রের সমস্ত পিক্সেলকে কয়েকটির মধ্যে একটিতে শ্রেণীবদ্ধ করা ভূমি সীমা ক্লাস বা থিম । এই শ্রেণিবদ্ধ ডেটা উত্পাদন করতে ব্যবহৃত হতে পারে থিম্যাটিক মানচিত্র একটি চিত্র উপস্থিত স্থল কভার।



শ্রেণিবিন্যাসের সময় বিশ্লেষক এবং কম্পিউটারের মধ্যে কথোপকথনের উপর নির্ভর করে, এখানে দুটি ধরণের শ্রেণিবিন্যাস রয়েছে:



  • তদারকি ও
  • নিরক্ষিত

সুতরাং, কোনও সময় নষ্ট না করে আসুন টেনসরফ্লো ইমেজ শ্রেণিবদ্ধকরণে ঝাঁপ দাও। আমার 2 টি উদাহরণ রয়েছে: সহজ এবং কঠিন। আসুন সহজটির সাথে এগিয়ে চলুন।

শেফ বনাম পুতুল বনাম লবণ

টেনসরফ্লো চিত্রের শ্রেণিবিন্যাস: ফ্যাশন এমএনআইএসটি

ফ্যাশন এমএনআইএসটি ডেটাসেট

এখানে আমরা ফ্যাশন এমএনআইএসটি ডেটাসেট ব্যবহার করতে যাচ্ছি যেখানে 10 টি বিভাগে 70,000 গ্রেস্কেল চিত্র রয়েছে। আমরা প্রশিক্ষণের জন্য 60000 এবং বাকী 10000 পরীক্ষার উদ্দেশ্যে ব্যবহার করব। আপনি টেনসরফ্লো থেকে সরাসরি ফ্যাশন এমএনআইএসটি অ্যাক্সেস করতে পারেন, কেবল ডেটা আমদানি এবং লোড করতে পারেন।

  • প্রথমে গ্রন্থাগারগুলি আমদানি করা যাক
___ ভবিষ্যত___ থেকে আমদানি পরম_ आयात, বিভাগ, প্রিন্ট_ফঙ্কশন # টেনসরফ্লো এবং tf.keras টেনসরফ্লো আমদানি কেরাস থেকে tf হিসাবে আমদানি করে
  • আসুন ডেটা লোড করি
ফ্যাশন_মনিস্ট = কেরাস.ড্যাটাসেটস.ফ্যাশন_মনিস্ট (ট্রেন_ইমিজস, ট্রেন_বিলাস), (টেস্ট_আইমেজস, টেস্ট_লেবেলস) = ফ্যাশন_মিনিস্ট.লোড_ডাটা ()
  • এর পরে, আমরা ক্লাসগুলিতে চিত্রগুলি ম্যাপ করতে চলেছি
শ্রেণী_নাম = ['টি-শার্ট / শীর্ষ', 'ট্রাউজার', 'পুলওভার', 'পোশাক', 'কোট', 'স্যান্ডেল', 'শার্ট', 'স্নিকার', 'ব্যাগ', 'গোড়ালি বুট']
  • তথ্য অন্বেষণ
ট্রেন_সামগ্রীআকৃতি 
# প্রতিটি লেবেল 0-9 এর মধ্যে
ট্রেন_লাবেল 
পরীক্ষা_সামগ্রীআকৃতি
  • এখন, ডেটা প্রাক প্রক্রিয়া করার সময় এসেছে time
pltচিত্র() pltimshow(ট্রেন_সামগ্রী[0]) pltরঙ বার() pltগ্রিড(মিথ্যা) pltদেখান() 
#আপনি যদি প্রশিক্ষণ সেটে প্রথম চিত্রটি পরিদর্শন করেন তবে আপনি দেখতে পাবেন যে পিক্সেল মান 0 থেকে 255 এর মধ্যে আসে।

  • নিউরাল নেটওয়ার্কে এটি ফিড করতে আমাদের 0-1 থেকে চিত্রগুলি স্কেল করতে হবে
ট্রেন_সামগ্রী = ট্রেন_সামগ্রী / 255.0 পরীক্ষা_সামগ্রী = পরীক্ষা_সামগ্রী / 255.0
  • আসুন কিছু চিত্র প্রদর্শন করি।
pltচিত্র(ডুমুর করা=(10,10)) জন্য i ভিতরে পরিসীমা(25): pltsubplot(,,i+এক) pltxticks([]) pltyticks([]) pltগ্রিড(মিথ্যা) pltimshow(ট্রেন_সামগ্রী[i], cmap=pltসেমিবাইনারি) pltxlabel(ক্লাস_নাম[ট্রেন_লাবেল[i]]) pltদেখান()
 

  • স্তরগুলি সেটআপ করুন
মডেল = শক্তঅনুক্রমিক([ শক্তস্তরগুলিসমতল(ইনপুট_শ্যাপ=(28, 28)), শক্তস্তরগুলিঘন(128, সক্রিয়করণ=tfসংখ্যারিলু), শক্তস্তরগুলিঘন(10, সক্রিয়করণ=tfসংখ্যাসফটম্যাক্স) ])
  • মডেলটি সঙ্কলন করুন
মডেলসংকলন(অপ্টিমাইজার='আদম', ক্ষতি='স্পার্স_একটিগ্রাফিকাল_ক্রোসেন্টরোপি', মেট্রিক্স=['সঠিকতা'])
  • মডেল প্রশিক্ষণ
মডেলফিট(ট্রেন_সামগ্রী, ট্রেন_লাবেল, পর্বগুলি=10)

  • নির্ভুলতার মূল্যায়ন করা
টেস্ট_লস, পরীক্ষা_একসি = মডেলমূল্যায়ন(পরীক্ষা_সামগ্রী, পরীক্ষার_প্রেম) ছাপা('পরীক্ষার নির্ভুলতা:', পরীক্ষা_একসি)

  • ভবিষ্যদ্বাণী করা
ভবিষ্যদ্বাণী = মডেলপূর্বাভাস(পরীক্ষা_সামগ্রী)
ভবিষ্যদ্বাণী[0]

পূর্বাভাস হ'ল 10 সংখ্যার অ্যারে। এগুলি চিত্রের 10 টি বিভিন্ন পোশাকের সাথে সম্পর্কিত বলে মনে হয় এমন মডেলের 'আত্মবিশ্বাস' বর্ণনা করে। আমরা দেখতে পাচ্ছি কোন লেবেলের সর্বোচ্চ আত্মবিশ্বাসের মান রয়েছে।

যেমনআরগম্যাক্স(ভবিষ্যদ্বাণী[0])# মডেল এটি পুরোপুরি আত্মবিশ্বাসী যে এটি একটি গোড়ালি বুট। আসুন দেখুন এটি সঠিক কিনা

আউটপুট: 9

পরীক্ষার_প্রেম[0]

আউটপুট: 9

  • এখন, 10 টি চ্যানেলের সম্পূর্ণ সেটটি দেখার সময় এসেছে
Def প্লট_মেজ(i, পূর্বাভাস_আরে, true_label, img): পূর্বাভাস_আরে, true_label, img = পূর্বাভাস_আরে[i], true_label[i], img[i] pltগ্রিড(মিথ্যা) pltxticks([]) pltyticks([]) pltimshow(img, cmap=pltসেমিবাইনারি) পূর্বাভাস_লাবেল = যেমনআরগম্যাক্স(পূর্বাভাস_আরে) যদি পূর্বাভাস_লাবেল == true_label: রঙ = 'সবুজ' অন্য: রঙ = 'নেট' pltxlabel('{} {: 2.0f}% ({}) 'বিন্যাস(ক্লাস_নাম[পূর্বাভাস_লাবেল], 100*যেমনসর্বাধিক(পূর্বাভাস_আরে), ক্লাস_নাম[true_label]), রঙ=রঙ) Def প্লট_মূল্য_আরে(i, পূর্বাভাস_আরে, true_label): পূর্বাভাস_আরে, true_label = পূর্বাভাস_আরে[i], true_label[i] pltগ্রিড(মিথ্যা) pltxticks([]) pltyticks([]) thisplot = pltবার(পরিসীমা(10), পূর্বাভাস_আরে, রঙ='# 777777') pltইলিম([0, এক]) পূর্বাভাস_লাবেল = যেমনআরগম্যাক্স(পূর্বাভাস_আরে) thisplot[পূর্বাভাস_লাবেল]set_color('নেট') thisplot[true_label]set_color('সবুজ')
  • প্রথমে 0 তম এবং 10 ম চিত্রটি দেখি
i = 0 pltচিত্র(ডুমুর করা=(,)) pltsubplot(এক,,এক) প্লট_মেজ(i, ভবিষ্যদ্বাণী, পরীক্ষার_প্রেম, পরীক্ষা_সামগ্রী) pltsubplot(এক,,) প্লট_মূল্য_আরে(i, ভবিষ্যদ্বাণী, পরীক্ষার_প্রেম) pltদেখান()

i = 10 pltচিত্র(ডুমুর করা=(,)) pltsubplot(এক,,এক) প্লট_মেজ(i, ভবিষ্যদ্বাণী, পরীক্ষার_প্রেম, পরীক্ষা_সামগ্রী) pltsubplot(এক,,) প্লট_মূল্য_আরে(i, ভবিষ্যদ্বাণী, পরীক্ষার_প্রেম) pltদেখান()

  • এখন আসুন, বেশ কয়েকটি চিত্র এবং তাদের পূর্বাভাসের প্লট করা যাক। সঠিকগুলি সবুজ, অন্যদিকে ভুলগুলি লাল।
num_rows =  num_col =  num_images = num_rows*num_col pltচিত্র(ডুমুর করা=(**num_col, *num_rows)) জন্য i ভিতরে পরিসীমা(num_images): pltsubplot(num_rows, *num_col, *i+এক) প্লট_মেজ(i, ভবিষ্যদ্বাণী, পরীক্ষার_প্রেম, পরীক্ষা_সামগ্রী) pltsubplot(num_rows, *num_col, *i+) প্লট_মূল্য_আরে(i, ভবিষ্যদ্বাণী, পরীক্ষার_প্রেম) pltদেখান()

  • শেষ পর্যন্ত, আমরা একটি একক চিত্র সম্পর্কে ভবিষ্যদ্বাণী করতে প্রশিক্ষিত মডেলটি ব্যবহার করব।
# পরীক্ষার ডেটাসেট থেকে একটি চিত্র ধরুন img = পরীক্ষা_সামগ্রী[0] ছাপা(imgআকৃতি)
# চিত্রটি এমন একটি ব্যাচে যুক্ত করুন যেখানে এটি একমাত্র সদস্য। img = (যেমনপ্রসারিত_ডিমগুলি(img,0)) ছাপা(imgআকৃতি)
পূর্বাভাস_সেসেল = মডেলপূর্বাভাস(img) ছাপা(পূর্বাভাস_সেসেল)

প্লট_মূল্য_আরে(0, পূর্বাভাস_সেসেল, পরীক্ষার_প্রেম) pltxticks(পরিসীমা(10), ক্লাস_নাম, ঘূর্ণন=চার পাঁচ) pltদেখান()

  • আপনি যেমন দেখতে পাচ্ছেন আমাদের একমাত্র ব্যাচের ব্যাচটিতে ভবিষ্যদ্বাণী।
ভবিষ্যদ্বাণী_ ফলাফল = যেমনআরগম্যাক্স(পূর্বাভাস_সেসেল[0])

আউটপুট: 9

সিফার -10: সিএনএন

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

  • ডেটা ডাউনলোড করা হচ্ছে
থেকে urllib.request আমদানি urlretrieve থেকে os.path আমদানি isfile, সট হয় থেকে tqdm আমদানি tqdm আমদানি টারফিল সিফার 10_ডেটসেট_ফোল্ডার_পথ = 'সিফার -10-ব্যাচস-পাই' ক্লাস ডাউনলোডপ্রগ্রস(tqdm): শেষ_ব্লক = 0 Def হুক(স্ব, block_num=এক, ব্লক আকার=এক, সর্বমোট মাপ=কিছুই না): স্বমোট = সর্বমোট মাপ স্বহালনাগাদ((block_num - স্বশেষ_ব্লক) * ব্লক আকার) স্বশেষ_ব্লক = block_num '' ' ডেটা (জিপ) ফাইলটি ইতিমধ্যে ডাউনলোড হয়েছে কিনা তা পরীক্ষা করে দেখুন যদি তা না হয় তবে এটি 'https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz' থেকে ডাউনলোড করুন এবং সিফার -10-পাইথন.টার.gz হিসাবে সংরক্ষণ করুন '' ' যদি না isfile('cifar-10-python.tar.gz'): সঙ্গে ডাউনলোডপ্রগ্রস(ইউনিট='বি', ইউনিট_স্কেল=সত্য, miniters=এক, desc='সিআইএফআর -10 ডেটাসেট') যেমন পিবিআর: urlretrieve( 'https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz', 'cifar-10-python.tar.gz', পিবিআরহুক) যদি না সট হয়(সিফার 10_ডেটসেট_ফোল্ডার_পথ): সঙ্গে টারফিলখোলা('cifar-10-python.tar.gz') যেমন তার: তারসব নিষ্কাশন() তারবন্ধ()
  • প্রয়োজনীয় গ্রন্থাগারগুলি আমদানি করা হচ্ছে
আমদানি আচার আমদানি অসাড় যেমন যেমন আমদানি matplotlib.pyplot যেমন plt
  • ডেটা বোঝা

ডেটাটির মূল ব্যাচটি 10000 × 3072 টেনসর একটি ন্যালি অ্যারেতে প্রকাশ করা হয় যেখানে 10000 নমুনা ডেটার সংখ্যা। চিত্রটি বর্ণযুক্ত এবং আকার 32 × 32। খাওয়ানো হয় (প্রস্থ x উচ্চতা x নাম_চ্যানেল) বা (num_channel x প্রস্থ x উচ্চতা) এর বিন্যাসে করা যেতে পারে। লেবেল সংজ্ঞায়িত করা যাক।

Def লোড_লেবেল_নাম(): প্রত্যাবর্তন ['বিমান', 'অটোমোবাইল', 'পাখি', 'বিড়াল', 'হরিণ', 'কুকুর', 'ব্যাঙ', 'ঘোড়া', 'জাহাজ', 'ট্রাক']
  • ডেটা পুনরায় আকার দেওয়া হচ্ছে

আমরা দুটি পর্যায়ে তথ্য পুনরায় আকার দিতে যাচ্ছি

প্রথমত, সারি ভেক্টরকে (3072) 3 টুকরা করুন। প্রতিটি টুকরা প্রতিটি চ্যানেলের সাথে সম্পর্কিত। এটি একটি সেন্সরটির (3 x 1024) মাত্রাতে ফলাফল। তারপরে ফলাফলটি সেন্সরটিকে পূর্ববর্তী ধাপ থেকে 32. 32 দিয়ে ভাগ করুন এখানে একটি চিত্রের প্রস্থের অর্থ। এর ফলাফল (3x32x32)।

সি সি # সি ++

দ্বিতীয়ত, আমাদের ডেটা (নাম_চ্যানেল, প্রস্থ, উচ্চতা) থেকে (প্রস্থ, উচ্চতা, নাম_চ্যানেল) স্থানান্তর করতে হবে। তার জন্য, আমরা ট্রান্সপোজ ফাংশনটি ব্যবহার করতে যাচ্ছি।

Def load_cfar10_batch(সিফার 10_ডেটসেট_ফোল্ডার_পথ, ব্যাচ_আইডি): সঙ্গে খোলা(সিফার 10_ডেটসেট_ফোল্ডার_পথ + '/ ডেটা_বাচ_' + পি(ব্যাচ_আইডি), মোড='আরবি') যেমন ফাইল: # নোট করুন এনকোডিংয়ের ধরনটি 'ল্যাটিন 1' ব্যাচ = আচারভার(ফাইল, এনকোডিং='ল্যাটিন 1') বৈশিষ্ট্য = ব্যাচ['তথ্য']পুনরায় আকার((লেন(ব্যাচ['তথ্য']), , 32, 32))স্থানান্তর(0, , , এক) লেবেল = ব্যাচ['লেবেল'] প্রত্যাবর্তন বৈশিষ্ট্য, লেবেল
  • ডেটা এক্সপ্লোর করে
Def ডিসপ্লে_স্ট্যাটস(সিফার 10_ডেটসেট_ফোল্ডার_পথ, ব্যাচ_আইডি, নমুনা_আইডি): বৈশিষ্ট্য, লেবেল = load_cfar10_batch(সিফার 10_ডেটসেট_ফোল্ডার_পথ, ব্যাচ_আইডি) যদি না (0 <= নমুনা_আইডি < লেন(বৈশিষ্ট্য)): ছাপা('{}ব্যাচে নমুনা{}{}সীমার বাইরে আছে। 'বিন্যাস(লেন(বৈশিষ্ট্য), ব্যাচ_আইডি, নমুনা_আইডি)) প্রত্যাবর্তন কিছুই না ছাপা(' ব্যাচের পরিসংখ্যান #{}: 'বিন্যাস(ব্যাচ_আইডি)) ছাপা('# নমুনার মধ্যে:{} 'বিন্যাস(লেন(বৈশিষ্ট্য))) লেবেল নাম = লোড_লেবেল_নাম() লেবেল_ অ্যাকাউন্টস = ডিক(জিপ(*যেমনঅনন্য(লেবেল, রিটার্ন_ অ্যাকাউন্টস=সত্য))) জন্য চাবি, মান ভিতরে লেবেল_ অ্যাকাউন্টসআইটেম(): ছাপা('লেবেল গণনা [{}] ({}):{}'বিন্যাস(চাবি, লেবেল নাম[চাবি]উপরের(), মান)) স্যাম্পল_আইমেজ = বৈশিষ্ট্য[নমুনা_আইডি] নমুনা_বেল = লেবেল[নমুনা_আইডি] ছাপা(' চিত্রের উদাহরণ{}: 'বিন্যাস(নমুনা_আইডি)) ছাপা('চিত্র - ন্যূনতম মান:{}সর্বাধিক মান:{}'বিন্যাস(স্যাম্পল_আইমেজমিনিট(), স্যাম্পল_আইমেজসর্বাধিক())) ছাপা('চিত্র - আকার:{}'বিন্যাস(স্যাম্পল_আইমেজআকৃতি)) ছাপা('লেবেল - লেবেল আইডি:{}নাম:{}'বিন্যাস(নমুনা_বেল, লেবেল নাম[নমুনা_বেল])) pltimshow(স্যাম্পল_আইমেজ)
%matplotlib সারিতে %কনফিগার ইনলাইনব্যাকেন্ডফিগার_ ফর্ম্যাট = 'রেটিনা' আমদানি অসাড় যেমন যেমন # ডেটাসেট অন্বেষণ করুন ব্যাচ_আইডি =  নমুনা_আইডি = 7000 ডিসপ্লে_স্ট্যাটস(সিফার 10_ডেটসেট_ফোল্ডার_পথ, ব্যাচ_আইডি, নমুনা_আইডি)

  • প্রিপ্রোসেসিং কার্যগুলি কার্যকর করা

আমরা ন্যূনতম-সর্বোচ্চ নরমালাইজেশনের মাধ্যমে ডেটা সাধারণকরণ করতে যাচ্ছি। এটি কেবলমাত্র সমস্ত এক্স মানকে 0 এবং 1 এর মধ্যে সীমাবদ্ধ করে।
y = (এক্স-মিনিট) / (সর্বোচ্চ-মিনিট)

Def স্বাভাবিক করা(এক্স): '' ' যুক্তি - এক্স: নমপি অ্যারে ইনপুট চিত্রের ডেটা [32, 32, 3] প্রত্যাবর্তন - নরমালাইজড এক্স '' ' মিনি_ভ্যাল = যেমনমিনিট(এক্স) সর্বোচ্চ_আর = যেমনসর্বাধিক(এক্স) এক্স = (এক্স-মিনি_ভ্যাল) / (সর্বোচ্চ_আর-মিনি_ভ্যাল) প্রত্যাবর্তন এক্স
  • ওয়ান হট এনকোড
Def ওয়ান_হোট_কোড(এক্স): '' ' যুক্তি - এক্স: লেবেলের একটি তালিকা প্রত্যাবর্তন - একটি গরম এনকোডিং ম্যাট্রিক্স (লেবেলের সংখ্যা, শ্রেণীর সংখ্যা) '' ' এনকোডেড = যেমনশূন্য((লেন(এক্স), 10)) জন্য আইডিএক্স, ঘন্টা ভিতরে গোনা(এক্স): এনকোডেড[আইডিএক্স] [ঘন্টা] = এক প্রত্যাবর্তন এনকোডেড
  • প্রাক প্রসেস এবং ডেটা সংরক্ষণ করুন
Def _প্রসেস_আর_সেভ করুন(স্বাভাবিক করা, ওয়ান_হোট_কোড, বৈশিষ্ট্য, লেবেল, ফাইলের নাম): বৈশিষ্ট্য = স্বাভাবিক করা(বৈশিষ্ট্য) লেবেল = ওয়ান_হোট_কোড(লেবেল) আচারফেলা((বৈশিষ্ট্য, লেবেল), খোলা(ফাইলের নাম, 'ডব্লিউবি')) Def প্রিপ্রোসেস_আর_সেভ_ডাটা(সিফার 10_ডেটসেট_ফোল্ডার_পথ, স্বাভাবিক করা, ওয়ান_হোট_কোড): n_batches =  বৈধ_ফিটচার্স = [] বৈধ_ব্যাপক = [] জন্য ব্যাচ_আই ভিতরে পরিসীমা(এক, n_batches + এক): বৈশিষ্ট্য, লেবেল = load_cfar10_batch(সিফার 10_ডেটসেট_ফোল্ডার_পথ, ব্যাচ_আই) # ব্যাচের পুরো ডেটাসেটে বৈধতা ডেটা হিসাবে সূচকটি পয়েন্ট হিসাবে সন্ধান করুন (10%) সূচি_অর্থ_করণ = int(লেন(বৈশিষ্ট্য) * 0.1) # ব্যাচের পুরো ডেটাসেটের 90% প্রাকপ্রসেস করুন # - বৈশিষ্ট্যগুলি স্বাভাবিক করুন # - ওয়ান_হো_েনকোড লেবেল # - 'প্রিপ্রোসেস_ব্যাচ_' + ব্যাচ_নম্বার নামে একটি নতুন ফাইল সংরক্ষণ করুন # - প্রতিটি ব্যাচের জন্য প্রতিটি ফাইল _প্রসেস_আর_সেভ করুন(স্বাভাবিক করা, ওয়ান_হোট_কোড, বৈশিষ্ট্য[:-সূচি_অর্থ_করণ], লেবেল[:-সূচি_অর্থ_করণ], 'প্রিপ্রোসেস_বাচ_' + পি(ব্যাচ_আই) + '.পি') # প্রশিক্ষণ ডেটাসেটের বিপরীতে, সমস্ত ব্যাচের ডেটাসেটের মাধ্যমে বৈধতা ডেটাসেট যুক্ত করা হবে # - ব্যাচের ভোল্ট ডেটাসেটের 10% নিন # - তাদের একটি তালিকায় যুক্ত করুন # - বৈধ_ফিজার্স # - বৈধ_বেলার বৈধ_ফিটচার্সপ্রসারিত করা(বৈশিষ্ট্য[-সূচি_অর্থ_করণ:]) বৈধ_ব্যাপকপ্রসারিত করা(লেবেল[-সূচি_অর্থ_করণ:]) সমস্ত স্ট্যাকড বৈধতা ডেটাসেট প্রিপ্রোসেস করুন _প্রসেস_আর_সেভ করুন(স্বাভাবিক করা, ওয়ান_হোট_কোড, যেমনঅ্যারে(বৈধ_ফিটচার্স), যেমনঅ্যারে(বৈধ_ব্যাপক), 'প্রাকপ্রসেস_ডিয়ালিটি.পি') # পরীক্ষার ডেটাসেট লোড করুন সঙ্গে খোলা(সিফার 10_ডেটসেট_ফোল্ডার_পথ + '/ টেস্ট_বাচ', মোড='আরবি') যেমন ফাইল: ব্যাচ = আচারভার(ফাইল, এনকোডিং='ল্যাটিন 1') # পরীক্ষার ডেটা প্রিপ্রসেস করুন টেস্ট_ফিজার্স = ব্যাচ['তথ্য']পুনরায় আকার((লেন(ব্যাচ['তথ্য']), , 32, 32))স্থানান্তর(0, , , এক) পরীক্ষার_প্রেম = ব্যাচ['লেবেল'] # সমস্ত পরীক্ষার ডেটা প্রিপ্রেসেস এবং সংরক্ষণ করুন _প্রসেস_আর_সেভ করুন(স্বাভাবিক করা, ওয়ান_হোট_কোড, যেমনঅ্যারে(টেস্ট_ফিজার্স), যেমনঅ্যারে(পরীক্ষার_প্রেম), 'প্রাকপ্রসেস_ট্রেইন.পি')
প্রিপ্রোসেস_আর_সেভ_ডাটা(সিফার 10_ডেটসেট_ফোল্ডার_পথ, স্বাভাবিক করা, ওয়ান_হোট_কোড)
  • চেকপয়েন্ট
আমদানি আচার বৈধ_ফিটচার্স, বৈধ_ব্যাপক = আচারভার(খোলা('প্রাকপ্রসেস_ডিয়ালিটি.পি', মোড='আরবি'))
  • নেটওয়ার্ক তৈরি হচ্ছে

পুরো মডেলটিতে মোট 14 টি স্তর রয়েছে।

আমদানি টেনসরফ্লো যেমন tf Def কনভ_নেট(এক্স, keep_prob): কন 1_ ফিল্টার = tfপরিবর্তনশীল(tfসংক্ষিপ্ত_ সাধারণ(আকৃতি=[, , , 64], মানে=0, এসটিডি দেব=0.08)) কনফাই_ফিল্টার = tfপরিবর্তনশীল(tfসংক্ষিপ্ত_ সাধারণ(আকৃতি=[, , 64, 128], মানে=0, এসটিডি দেব=0.08)) কনফিউশন_ফিল্টার = tfপরিবর্তনশীল(tfসংক্ষিপ্ত_ সাধারণ(আকৃতি=[, , 128, 256], মানে=0, এসটিডি দেব=0.08)) কনফ 4_ ফিল্টার = tfপরিবর্তনশীল(tfসংক্ষিপ্ত_ সাধারণ(আকৃতি=[, , 256, 512], মানে=0, এসটিডি দেব=0.08)) # 1, 2 কন 1 = tfসংখ্যাকনফিড(এক্স, কন 1_ ফিল্টার, পদক্ষেপ=[এক,এক,এক,এক], প্যাডিং='একই') কন 1 = tfসংখ্যারিলু(কন 1) কন 1_পুল = tfসংখ্যাসর্বোচ্চ_পুল(কন 1, ksize=[এক,,,এক], পদক্ষেপ=[এক,,,এক], প্যাডিং='একই') কন 1_ বিএন = tfস্তরগুলিব্যাচ_নির্মালাইজেশন(কন 1_পুল) # 3. 4 প্রত্যয় = tfসংখ্যাকনফিড(কন 1_ বিএন, কনফাই_ফিল্টার, পদক্ষেপ=[এক,এক,এক,এক], প্যাডিং='একই') প্রত্যয় = tfসংখ্যারিলু(প্রত্যয়) কনফুল_পুল = tfসংখ্যাসর্বোচ্চ_পুল(প্রত্যয়, ksize=[এক,,,এক], পদক্ষেপ=[এক,,,এক], প্যাডিং='একই') কনফ 2_বিএন = tfস্তরগুলিব্যাচ_নির্মালাইজেশন(কনফুল_পুল) # 5, 6 প্রত্যয় = tfসংখ্যাকনফিড(কনফ 2_বিএন, কনফিউশন_ফিল্টার, পদক্ষেপ=[এক,এক,এক,এক], প্যাডিং='একই') প্রত্যয় = tfসংখ্যারিলু(প্রত্যয়) কনফিউশন_পুল = tfসংখ্যাসর্বোচ্চ_পুল(প্রত্যয়, ksize=[এক,,,এক], পদক্ষেপ=[এক,,,এক], প্যাডিং='একই') কনফিউশন_বিএন = tfস্তরগুলিব্যাচ_নির্মালাইজেশন(কনফিউশন_পুল) # 7, 8 কনফ 4 = tfসংখ্যাকনফিড(কনফিউশন_বিএন, কনফ 4_ ফিল্টার, পদক্ষেপ=[এক,এক,এক,এক], প্যাডিং='একই') কনফ 4 = tfসংখ্যারিলু(কনফ 4) কনফ 4_পুল = tfসংখ্যাসর্বোচ্চ_পুল(কনফ 4, ksize=[এক,,,এক], পদক্ষেপ=[এক,,,এক], প্যাডিং='একই') কনফ 4_বিএন = tfস্তরগুলিব্যাচ_নির্মালাইজেশন(কনফ 4_পুল) # 9 সমান = tfঅবদানস্তরগুলিসমতল করা(কনফ 4_বিএন) # 10 পূর্ণ 1 = tfঅবদানস্তরগুলিসম্পূর্ণ_সংযুক্ত(ইনপুটস=সমান, num_outputs=128, অ্যাক্টিভেশন_ফএন=tfসংখ্যারিলু) পূর্ণ 1 = tfসংখ্যাবাদ পড়া(পূর্ণ 1, keep_prob) পূর্ণ 1 = tfস্তরগুলিব্যাচ_নির্মালাইজেশন(পূর্ণ 1) # এগারো জন পূর্ণ 2 = tfঅবদানস্তরগুলিসম্পূর্ণ_সংযুক্ত(ইনপুটস=পূর্ণ 1, num_outputs=256, অ্যাক্টিভেশন_ফএন=tfসংখ্যারিলু) পূর্ণ 2 = tfসংখ্যাবাদ পড়া(পূর্ণ 2, keep_prob) পূর্ণ 2 = tfস্তরগুলিব্যাচ_নির্মালাইজেশন(পূর্ণ 2) # 12 পূর্ণ 3 = tfঅবদানস্তরগুলিসম্পূর্ণ_সংযুক্ত(ইনপুটস=পূর্ণ 2, num_outputs=512, অ্যাক্টিভেশন_ফএন=tfসংখ্যারিলু) পূর্ণ 3 = tfসংখ্যাবাদ পড়া(পূর্ণ 3, keep_prob) পূর্ণ 3 = tfস্তরগুলিব্যাচ_নির্মালাইজেশন(পূর্ণ 3) # 13 পূর্ণ 4 = tfঅবদানস্তরগুলিসম্পূর্ণ_সংযুক্ত(ইনপুটস=পূর্ণ 3, num_outputs=1024, অ্যাক্টিভেশন_ফএন=tfসংখ্যারিলু) পূর্ণ 4 = tfসংখ্যাবাদ পড়া(পূর্ণ 4, keep_prob) পূর্ণ 4 = tfস্তরগুলিব্যাচ_নির্মালাইজেশন(পূর্ণ 4) # 14 আউট = tfঅবদানস্তরগুলিসম্পূর্ণ_সংযুক্ত(ইনপুটস=পূর্ণ 3, num_outputs=10, অ্যাক্টিভেশন_ফএন=কিছুই না) প্রত্যাবর্তন আউট
  • হাইপারপ্যারামিটার
পর্বগুলি = 10 ব্যাচ আকার = 128 keep_probability = 0.7 learning_rate = 0.001
লগইটস = কনভ_নেট(এক্স, keep_prob) মডেল = tfপরিচয়(লগইটস, নাম='লগিট') # নাম লগইট করে টেনসর, যাতে প্রশিক্ষণের পরে ডিস্ক থেকে লোড করা যায় # ক্ষতি এবং অপ্টিমাইজার খরচ = tfকমিয়ে দিন(tfসংখ্যাসফটম্যাক্স_ক্রস_এন্ট্রপি_সহ_লগিট(লগইটস=লগইটস, লেবেল=ওয়াই)) অপ্টিমাইজার = tfট্রেনঅ্যাডামঅ্যাপটিমাইজার(learning_rate=learning_rate)কমান(খরচ) # সঠিকতা बरोबर_প্রড = tfসমান(tfআরগম্যাক্স(লগইটস, এক), tfআরগম্যাক্স(ওয়াই, এক)) সঠিকতা = tfকমিয়ে দিন(tfনিক্ষেপ(बरोबर_প্রড, tfভাসা), নাম='সঠিকতা')
  • নিউরাল নেটওয়ার্ক প্রশিক্ষণ
# সিঙ্গল অপটিমাইজেশন 
Def
ট্রেন_সামান্য_ নেট ওয়ার্ক(সেশন, অপ্টিমাইজার, keep_probability, বৈশিষ্ট্য_বাচ, লেবেল_বাচ): সেশনচালান(অপ্টিমাইজার, ফিড_ডিক্ট={ এক্স: বৈশিষ্ট্য_বাচ, ওয়াই: লেবেল_বাচ, keep_prob: keep_probability })
পরিসংখ্যান প্রদর্শন মুদ্রণ_স্ট্যাটস(সেশন, বৈশিষ্ট্য_বাচ, লেবেল_বাচ, খরচ, সঠিকতা): ক্ষতি = sessচালান(খরচ, ফিড_ডিক্ট={ এক্স: বৈশিষ্ট্য_বাচ, ওয়াই: লেবেল_বাচ, keep_prob: এক. }) বৈধ_একসি = sessচালান(সঠিকতা, ফিড_ডিক্ট={ এক্স: বৈধ_ফিটচার্স, ওয়াই: বৈধ_ব্যাপক, keep_prob: এক. }) ছাপা('ক্ষতি:{:> 10.4f}বৈধতা নির্ভুলতা:{: .6f}'বিন্যাস(ক্ষতি, বৈধ_একসি))
  • সম্পূর্ণ প্রশিক্ষণ এবং মডেল সংরক্ষণ করা
Def batch_features_labels(বৈশিষ্ট্য, লেবেল, ব্যাচ আকার): '' ' ব্যাচগুলিতে বৈশিষ্ট্য এবং লেবেলগুলি বিভক্ত করুন '' ' জন্য শুরু ভিতরে পরিসীমা(0, লেন(বৈশিষ্ট্য), ব্যাচ আকার): শেষ = মিনিট(শুরু + ব্যাচ আকার, লেন(বৈশিষ্ট্য)) ফলন বৈশিষ্ট্য[শুরু:শেষ], লেবেল[শুরু:শেষ] Def লোড_প্রসেস_ট্রেইনিং_বাচে atch(ব্যাচ_আইডি, ব্যাচ আকার): '' ' প্রিপ্রসেসড ট্রেনিং ডেটা লোড করুন এবং তাদের বা তার চেয়ে কম ব্যাচে ফিরিয়ে দিন '' ' ফাইলের নাম = 'প্রিপ্রোসেস_বাচ_' + পি(ব্যাচ_আইডি) + '.পি' বৈশিষ্ট্য, লেবেল = আচারভার(খোলা(ফাইলের নাম, মোড='আরবি')) # আকার বা তারও কম ব্যাচের প্রশিক্ষণ ডেটা ফিরিয়ে দিন প্রত্যাবর্তন batch_features_labels(বৈশিষ্ট্য, লেবেল, ব্যাচ আকার)
# সংরক্ষণের মডেল এবং পথ 
save_model_path
= './image_classization' ছাপা('প্রশিক্ষণ ...') সঙ্গে tfসেশন() যেমন sess: # ভেরিয়েবল শুরু করা sessচালান(tfগ্লোবাল_ভেরিয়েবলস_আইনিটিয়ালাইজার()) # প্রশিক্ষণ চক্র জন্য পর্ব ভিতরে পরিসীমা(পর্বগুলি): # সমস্ত ব্যাচ উপর লুপ n_batches = জন্য ব্যাচ_আই ভিতরে পরিসীমা(এক, n_batches + এক): জন্য batch_features, ব্যাচ_লাবেলস ভিতরে লোড_প্রসেস_ট্রেইনিং_বাচে atch(ব্যাচ_আই, ব্যাচ আকার): ট্রেন_সামান্য_ নেট ওয়ার্ক(sess, অপ্টিমাইজার, keep_probability, batch_features, ব্যাচ_লাবেলস) ছাপা('যুগ{:> 2, সিআইএফএআর -10 ব্যাচ{}: 'বিন্যাস(পর্ব + এক, ব্যাচ_আই), শেষ='') মুদ্রণ_স্ট্যাটস(sess, batch_features, ব্যাচ_লাবেলস, খরচ, সঠিকতা) # মডেল সংরক্ষণ করুন সেভার = tfট্রেনসেভার() save_path = সেভারসংরক্ষণ(sess, save_model_path)

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

  • মডেল পরীক্ষা করা হচ্ছে
আমদানি আচার আমদানি অসাড় যেমন যেমন আমদানি matplotlib.pyplot যেমন plt থেকে sklearn.preprocessing আমদানি লেবেলবাইনারাইজার Def batch_features_labels(বৈশিষ্ট্য, লেবেল, ব্যাচ আকার): '' ' ব্যাচগুলিতে বৈশিষ্ট্য এবং লেবেলগুলি বিভক্ত করুন '' ' জন্য শুরু ভিতরে পরিসীমা(0, লেন(বৈশিষ্ট্য), ব্যাচ আকার): শেষ = মিনিট(শুরু + ব্যাচ আকার, লেন(বৈশিষ্ট্য)) ফলন বৈশিষ্ট্য[শুরু:শেষ], লেবেল[শুরু:শেষ] Def ডিসপ্লে_আইমেজ_প্রেডিকশনস(বৈশিষ্ট্য, লেবেল, ভবিষ্যদ্বাণী, শীর্ষ_ন_ ভবিষ্যদ্বাণী): n_class = 10 লেবেল নাম = লোড_লেবেল_নাম() লেবেল_বাইনারাইজার = লেবেলবাইনারাইজার() লেবেল_বাইনারাইজারফিট(পরিসীমা(n_class)) লেবেল_আইডি = লেবেল_বাইনারাইজারবিপরীতমুখী ট্রান্সফর্ম(যেমনঅ্যারে(লেবেল)) ডুমুর, axies = pltসাবপ্লট(নরো=শীর্ষ_ন_ ভবিষ্যদ্বাণী, এনসিওএল=, ডুমুর করা=(বিশ, 10)) ডুমুরটাইট_লেআউট() ডুমুরসাবটাইটেল('সফটম্যাক্স প্রেডিকশনস', অক্ষরের আকার=বিশ, ওয়াই=1.1) n_ ভবিষ্যদ্বাণী =  মার্জিন = 0.05 ইন্ড = যেমনআর্জেড(n_ ভবিষ্যদ্বাণী) প্রস্থ = (এক. - ঘ। * মার্জিন) / n_ ভবিষ্যদ্বাণী জন্য ইমেজ_আই, (বৈশিষ্ট্য, লেবেল_আইডি, পূর্বনির্ধারিত নীতিসমূহ, পূর্ব_মূল্যগুলি) ভিতরে গোনা(জিপ(বৈশিষ্ট্য, লেবেল_আইডি, ভবিষ্যদ্বাণীসূচকগুলি, ভবিষ্যদ্বাণীমান)): যদি (ইমেজ_আই < শীর্ষ_ন_ ভবিষ্যদ্বাণী): পূর্ব_নাম = [লেবেল নাম[pred_i] জন্য pred_i ভিতরে পূর্বনির্ধারিত নীতিসমূহ] সঠিক নাম = লেবেল নাম[লেবেল_আইডি] axies[ইমেজ_আই] [0]imshow((বৈশিষ্ট্য*255)অ্যাস্টাইপ(যেমনint32, অনুলিপি=মিথ্যা)) axies[ইমেজ_আই] [0]set_title(সঠিক নাম) axies[ইমেজ_আই] [0]set_axis_off() axies[ইমেজ_আই] [এক]বার্(ইন্ড + মার্জিন, পূর্ব_মূল্যগুলি[:], প্রস্থ) axies[ইমেজ_আই] [এক]সেট_টিক্স(ইন্ড + মার্জিন) axies[ইমেজ_আই] [এক]set_yticklabels(পূর্ব_নাম[::-এক]) axies[ইমেজ_আই] [এক]সেট_স্টিক্স([0, 0.5, 1.0])
%matplotlib সারিতে %কনফিগার ইনলাইনব্যাকেন্ডফিগার_ ফর্ম্যাট = 'রেটিনা' আমদানি টেনসরফ্লো যেমন tf আমদানি আচার আমদানি এলোমেলো save_model_path = './image_classization' ব্যাচ আকার = 64 n_s উদাহরণ = 10 শীর্ষ_ন_ ভবিষ্যদ্বাণী =  Def test_model(): টেস্ট_ফিজার্স, পরীক্ষার_প্রেম = আচারভার(খোলা('প্রাকপ্রসেস_ট্রেইন.পি', মোড='আরবি')) বোঝা_গ্রাফ = tfচিত্রলেখ() সঙ্গে tfসেশন(চিত্রলেখ=বোঝা_গ্রাফ) যেমন sess: # লোড মডেল লোডার = tfট্রেনআমদানি_মেটা_গ্রাফ(save_model_path + '.মেটা') লোডারপুনরুদ্ধার(sess, save_model_path) # বোঝা মডেল থেকে টেনার পান Get লোড_এক্স = বোঝা_গ্রাফget_tensor_by_name('ইনপুট_এক্স: 0') বোঝাই_ই = বোঝা_গ্রাফget_tensor_by_name('আউটপুট_ওয়াই: 0') লোড_কিপ_প্রোব = বোঝা_গ্রাফget_tensor_by_name('keep_prob: 0') loaded_logits = বোঝা_গ্রাফget_tensor_by_name('লগইট: 0') লোড_এইচসি = বোঝা_গ্রাফget_tensor_by_name('নির্ভুলতা: 0') # মেমরির সীমাবদ্ধতার জন্য ব্যাচগুলিতে নির্ভুলতা পান পরীক্ষা_বাচ_এএচসি_সামগ্রী = 0 পরীক্ষা_বাচ_কাউন্ট = 0 জন্য ট্রেন_ফিজার_বাচ, ট্রেন_লাবেল_বাচ ভিতরে batch_features_labels(টেস্ট_ফিজার্স, পরীক্ষার_প্রেম, ব্যাচ আকার): পরীক্ষা_বাচ_এএচসি_সামগ্রী + = sessচালান( লোড_এইচসি, ফিড_ডিক্ট={লোড_এক্স: ট্রেন_ফিজার_বাচ, বোঝাই_ই: ট্রেন_লাবেল_বাচ, লোড_কিপ_প্রোব: 1.0}) পরীক্ষা_বাচ_কাউন্ট + = এক ছাপা('পরীক্ষার নির্ভুলতা:{} 'বিন্যাস(পরীক্ষা_বাচ_এএচসি_সামগ্রী/পরীক্ষা_বাচ_কাউন্ট)) # র্যান্ডম নমুনাগুলি মুদ্রণ করুন এলোমেলো_স্টেস্ট_সামগ্রী, এলোমেলো_টেষ্ট_লবেলস = টিপল(জিপ(*এলোমেলোনমুনা(তালিকা(জিপ(টেস্ট_ফিজার্স, পরীক্ষার_প্রেম)), n_s উদাহরণ))) এলোমেলো_পরে_প্রেডিকশনস = sessচালান( tfসংখ্যাশীর্ষ_কে(tfসংখ্যাসফটম্যাক্স(loaded_logits), শীর্ষ_ন_ ভবিষ্যদ্বাণী), ফিড_ডিক্ট={লোড_এক্স: এলোমেলো_স্টেস্ট_সামগ্রী, বোঝাই_ই: এলোমেলো_টেষ্ট_লবেলস, লোড_কিপ_প্রোব: 1.0}) ডিসপ্লে_আইমেজ_প্রেডিকশনস(এলোমেলো_স্টেস্ট_সামগ্রী, এলোমেলো_টেষ্ট_লবেলস, এলোমেলো_পরে_প্রেডিকশনস, শীর্ষ_ন_ ভবিষ্যদ্বাণী) test_model()

আউটপুট: পরীক্ষার নির্ভুলতা: 0.5882762738853503

এখন, আপনি যদি আরও স্নাতকের জন্য আপনার নিউরাল নেটওয়ার্ককে প্রশিক্ষণ দেন বা অ্যাক্টিভেশন ফাংশনটি পরিবর্তন করেন তবে আপনি একটি আলাদা ফলাফল পেতে পারেন যা আরও ভাল নির্ভুলতা থাকতে পারে।

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

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