কেরাসের সাথে রিয়েল এস্টেটের দামের পূর্বাভাস দেওয়ার জন্য কীভাবে আপনার প্রথম নিউরাল নেটওয়ার্ক তৈরি করবেন

গভীর শিক্ষণ পেশাদারের মতো কয়েক লাইনের কোডগুলিতে আপনার প্রথম নিউরাল নেটওয়ার্ক তৈরির জন্য ধাপে ধাপে শিক্ষানবিশ গাইড!

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

  • ডেটা ব্রাউজিং এবং প্রক্রিয়াজাতকরণ
  • আমাদের নিউরাল নেটওয়ার্ক তৈরি এবং প্রশিক্ষণ
  • ক্ষতি এবং নির্ভুলতার ভিজ্যুয়ালাইজ করুন
  • আমাদের নিউরাল নেটওয়ার্কে নিয়মিতকরণ যুক্ত করা হচ্ছে

মাত্র 20 থেকে 30 মিনিটের মধ্যেই আপনার নিজের স্নায়বিক নেটওয়ার্কটি গভীর শিক্ষার অনুশীলনের মতো এনকোড করা হবে!

প্রয়োজনীয়তা:

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

  • গভীর শিক্ষা এবং ডেটা বিজ্ঞানের জন্য পাইথনের সাথে শুরু করা

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

  • স্বজ্ঞাত ডিপ লার্নিং পার্ট 1 এ: নিউরাল নেটওয়ার্কগুলির পরিচিতি
  • স্বজ্ঞাত ডিপ লার্নিং পার্ট 1 বি: নিউরাল নেটওয়ার্কগুলির পরিচিতি

আপনার প্রয়োজনীয় সংস্থানগুলি:

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

ডেটা সেট সেট করুন

আপনি বৈকল্পিকভাবে কোনও টীকাগুলি জুপিটার নোটবুকও ডাউনলোড করতে পারেন যা এতে এই পোস্টের সমস্ত কোড রয়েছে: জুপিটার নোটবুক।

নোট করুন যে গিথুব থেকে এই নোটবুকটি ডাউনলোড করতে আপনার হোম পৃষ্ঠায় যেতে হবে এবং সমস্ত ফাইল ডাউনলোড করতে জিপ ডাউনলোড করতে হবে:

এবং এখন শুরু করা যাক!

ডেটা ব্রাউজিং এবং প্রক্রিয়াজাতকরণ

আমরা একটি এমএল অ্যালগরিদম কোড করার আগে, আমাদের অবশ্যই প্রথমে আমাদের ডেটাটি এমন একটি ফর্ম্যাটে আনতে হবে যা অ্যালগরিদম চায়। বিশেষত, আমাদের অবশ্যই:

  • কমা বিভাজনযুক্ত মান (সিএসভি) ফাইলটিতে পড়ুন এবং এটিকে অ্যারে রূপান্তর করুন convert অ্যারেগুলি এমন একটি ডেটা ফর্ম্যাট যা আমাদের অ্যালগরিদম প্রক্রিয়া করতে পারে।
  • আমাদের ডেটাসেটটি ইনপুট বৈশিষ্ট্যগুলিতে ভাগ করুন (যা আমরা এক্স বলব) এবং লেবেল (যা আমরা y বলব)।
  • ডেটা স্কেল করুন (আমরা এটিকে সাধারণীকরণ বলি) যাতে ইনপুট বৈশিষ্ট্যগুলি একই পরিমাণের হয়।
  • আমাদের ডেটা সেটটি প্রশিক্ষণ সেট, বৈধতা সেট এবং পরীক্ষার সেটে ভাগ করুন। আমাদের এই তিনটি ডেটাসেটের প্রয়োজন কেন আপনার যদি একটি রিফ্রেশার প্রয়োজন হয়, দয়া করে স্বজ্ঞাত ডিপ লার্নিং পার্ট 1 বি দেখুন।

চল শুরু করা যাক! ডিপ লার্নিং এবং ডেটা সায়েন্স টিউটোরিয়ালের জন্য পাইথনের সাথে শুরু করা থেকে আপনার পরিবেশে পান্ডাস প্যাকেজটি ডাউনলোড করা উচিত ছিল। আমাদের নোটবুকটি জানাতে হবে যে আমরা এই প্যাকেজটি আমদানি করে ব্যবহার করছি। নিম্নলিখিত কোডটি প্রবেশ করান এবং Alt-Enter কী সংমিশ্রণটি টিপুন:

পিডি হিসাবে পান্ডস আমদানি করুন

এর অর্থ হ'ল আমি পিডি নামক প্যান্ডাস প্যাকেজে কোড উল্লেখ করছি। তারপরে আমরা নিম্নলিখিত কোডের লাইনটি সম্পাদন করে CSV ফাইলটি পড়ি:

df = pd.read_csv ('housepricedata.csv')

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

df

আপনার নোটবুকটি দেখতে এরকম কিছু হওয়া উচিত:

এখানে আপনি ডেটাটি একটু এক্সপ্লোর করতে পারেন। প্রথম দশটি কলামে আমাদের ইনপুট ফাংশন রয়েছে:

  • জমির ক্ষেত্র (মিঃ এ)
  • সামগ্রিক গুণমান (1 থেকে 10 পর্যন্ত স্কেল)
  • সামগ্রিক অবস্থা (1 থেকে 10 পর্যন্ত স্কেল)
  • মোট বেসমেন্টের ক্ষেত্র (মিঃ এ)
  • বাথরুম সংখ্যা
  • অর্ধেক বাথরুমের সংখ্যা
  • মাটির উপরে শয়নকক্ষের সংখ্যা
  • মাটির উপরে কক্ষের মোট সংখ্যা
  • চিমনি সংখ্যা
  • গ্যারেজ অঞ্চল (মিঃ এ)

আমাদের শেষ কলামে আমাদের ফাংশন রয়েছে যা আমরা পূর্বাভাস দিতে চাই:

  • বাড়ির দামটি মিডিয়েনের উপরে কি না? (হ্যাঁর জন্য 1 এবং কোনও 0 এর জন্য নয়)

এখন যেহেতু আমরা দেখেছি যে আমাদের ডেটা দেখতে কেমন, আমরা আমাদের মেশিনটিকে প্রক্রিয়াজাত করার জন্য এটি অ্যারেতে রূপান্তর করতে চাই:

ডেটাসেট = df.values

আমাদের ডেটা ফ্রেমটিকে একটি অ্যারে রূপান্তর করতে, আমরা কেবল "ডেটাসেট" ভেরিয়েবলের মধ্যে df এর মান (df.values ​​অ্যাক্সেস করে) সঞ্চয় করি। এই "ডেটাসেট" ভেরিয়েবলটিতে কী আছে তা দেখতে, আপনার নোটবুকের ধূসর বাক্সে কেবল "ডেটাসেট" লিখুন এবং সেলটি চালান (আল্ট-এন্টার):

রেকর্ড

আপনি দেখতে পাচ্ছেন, সবকিছু এখন একটি অ্যারেতে সঞ্চিত রয়েছে:

আমাদের ডেটা ফ্রেমকে একটি অ্যারেতে রূপান্তর করুন

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

এক্স = ডেটা রেকর্ড [:, 0:10]

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

যেহেতু আমরা লাইনগুলি বিভাজন করছি না, তাই আমরা কমাটির সামনে ":" রেখেছি। এর অর্থ হ'ল ডেটাসেটের সমস্ত সারি এক্স-এ অন্তর্ভুক্ত করা হবে that

আমরা প্রথম 10 টি কলাম বের করতে চাই। সুতরাং, কমাটির পরে "0:10" এর অর্থ 0 থেকে 9 কলামগুলি এক্স-এ রাখা হয়েছে (কলাম 10 অন্তর্ভুক্ত নয়)। আমাদের কলামগুলি সূচী 0 দিয়ে শুরু হয় সুতরাং প্রথম 10 টি কলাম 0 টি 9 এর মধ্য দিয়ে সত্যই কলাম are

তারপরে আমরা আমাদের অ্যারের শেষ কলামটি ওয়াইতে অর্পণ করি:

Y = ডেটা রেকর্ড [:, 10]

ঠিক আছে, এখন আমাদের ডেটাসেটটি ইনপুট বৈশিষ্ট্যগুলিতে (এক্স) এবং আমরা কী ভবিষ্যদ্বাণী করতে চাই তার লেবেল (ওয়াই) বিভক্ত করি।

আমাদের প্রসেসিংয়ের পরবর্তী পদক্ষেপটি নিশ্চিত করা হয় যে ইনপুট বৈশিষ্ট্যের স্কেল একই রকম। বর্তমানে, স্থল অঞ্চল হিসাবে বৈশিষ্ট্যগুলি হাজারের ক্রম অনুসারে, সামগ্রিক মানের 1 থেকে 10 রেট দেওয়া হয় এবং অগ্নিকুণ্ডের সংখ্যা সাধারণত 0, 1 বা 2 হয়।

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

আমাদের প্রথমে যে কোডটি ব্যবহার করতে চাই তা আমদানি করতে হবে:

স্কলারন আমদানি প্রিপ্রোসেসিং থেকে

এটি বলে যে আমি স্কলারন প্যাকেজটির প্রিপ্রোসেসিংয়ে কোডটি ব্যবহার করতে চাই। তারপরে আমরা ন্যূনতম-সর্বোচ্চ স্কেলারের নামক একটি ফাংশন ব্যবহার করি যা ডেটা সেটটিকে স্কেল করে যাতে সমস্ত ইনপুট বৈশিষ্ট্য 0 এবং 1 এর মধ্যে থাকে:

মিনি_ম্যাক্স_স্কেলার = প্রিপ্রোসেসিং M মিনিম্যাক্সস্কেলার () এক্স_স্কেল = মিনিট_ম্যাক্স_সক্লারআইফিট_ট্রান্সফর্ম (এক্স)

মনে রাখবেন যে আমরা আমাদের নিউরাল নেটওয়ার্ক প্রশিক্ষণে সহায়তার জন্য উদ্দেশ্যমূলকভাবে 0 এবং 1 বেছে নিয়েছি। আমরা এর পিছনে তত্ত্বটি যেতে যাচ্ছি না। আমাদের স্কেল করা ডেটা সেটটি এখন "X_scale" অ্যারেতে সংরক্ষণ করা হয়েছে। যদি আপনি "এক্স_স্কেল" দেখতে কেমন তা দেখতে চান তবে কেবল সেলটি চালান:

এক্স_স্কেল

আপনার জুপিটার নোটবুকটি এখন এর মতো দেখতে হবে:

আমরা এখন ডেটা প্রক্রিয়াজাতকরণের আমাদের চূড়ান্ত পদক্ষেপে পৌঁছেছি, যা আমাদের ডেটা সেটটিকে প্রশিক্ষণ সেট, একটি বৈধতা সেট এবং একটি পরীক্ষার সেটগুলিতে বিভক্ত করা।

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

sklearn.model_selection আমদানি ট্রেন_েস্ট_স্প্লিট থেকে

তারপরে আপনার ডেটাসেটটি নিম্নরূপে বিভক্ত করুন:

এক্স_ট্রেইন, এক্স_ওয়াল_এন্ড_স্টেস্ট, ওয়াই_ট্রেইন, ওয়াই_ওয়াল_এন্ড_স্টেস্ট = ট্রেন_েস্ট_স্প্লিট (এক্স_স্কেল, ওয়াই, টেস্ট_সাইজ = 0.3)

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

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

এক্স_ওয়াল, এক্স_স্টেস্ট, ওয়াই_ওয়াল, ওয়াই টেস্ট = ট্রেন_েস্ট_স্প্লিট (এক্স_ওয়াল_অ্যান্ড_স্টেস্ট, ওয়াই_ওয়াল_অ্যান্ড_স্টেস্ট, টেস্ট_সাইজ = 0.5)

উপরের কোডটি Val_and_test এর আকারকে বৈধতা সেট এবং পরীক্ষার সেটে সমানভাবে ভাগ করে।

সংক্ষেপে, আমাদের এখন আমাদের ডেটা সেটগুলির জন্য মোট ছয়টি ভেরিয়েবল রয়েছে যা আমরা ব্যবহার করব:

  • এক্স_ট্রেইন (10 ইনপুট ফাংশন, সম্পূর্ণ ডেটা সেট এর 70%)
  • এক্স_ওয়াল (10 ইনপুট বৈশিষ্ট্যগুলি, পুরো ডেটা সেটের 15%)
  • এক্স_টেষ্ট (10 ইনপুট ফাংশন, পুরো ডেটা সেটের 15%)
  • Y_train (1 টি লেবেল, সম্পূর্ণ ডেটা সেট এর 70%)
  • Y_val (1 টি লেবেল, পুরো ডেটা সেটের 15%)
  • Y_test (1 টি লেবেল, পুরো ডেটা সেটের 15%)

যদি আপনি দেখতে চান যে অ্যারেগুলির আকারগুলি তাদের প্রত্যেকের জন্য কী (যেমন তারা কোন মাত্রা) কেবল তাদের চালান

মুদ্রণ (এক্স_ট্রেইন.শ্যাপ, এক্স_ওয়াল.শ্যাপ, এক্স_স্টেস্ট.শ্যাপ, ওয়াই_ট্রেইন.শ্যাপ, ওয়াই_ওয়াল.শ্যাপ, ওয়াই টেষ্ট.শ্যাপ)

আপনার জুপিটার নোটবুকটি দেখতে এমন হওয়া উচিত:

আপনি দেখতে পাচ্ছেন, প্রশিক্ষণ সেটটিতে 1022 ডেটা পয়েন্ট রয়েছে, যখন বৈধতা এবং পরীক্ষার সেটগুলিতে প্রতিটি 219 ডেটা পয়েন্ট থাকে। এক্স ভেরিয়েবলের 10 টি ইনপুট বৈশিষ্ট্য রয়েছে এবং ওয়াই ভেরিয়েবলের কেবলমাত্র একটি ভবিষ্যতবাণী বৈশিষ্ট্য রয়েছে।

এবং এখন আমাদের ডেটা শেষ পর্যন্ত প্রস্তুত! ভাই!

সংক্ষিপ্তসার: ডেটা প্রক্রিয়া করার সময়, আমাদের রয়েছে:

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

আমাদের প্রথম নিউরাল নেটওয়ার্ক তৈরি এবং প্রশিক্ষণ

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

প্রথম পদক্ষেপ: আর্কিটেকচার স্থাপন করা

আমাদের প্রথম কাজটি করা দরকার আর্কিটেকচার স্থাপন করা ure প্রথমে আমরা কী ধরণের নিউরাল নেটওয়ার্ক আর্কিটেকচার চাই তা বিবেচনা করি। মনে করুন আমরা এই নিউরাল নেটওয়ার্কটি চাই:

নিউরাল নেটওয়ার্ক আর্কিটেকচার যা আমরা আমাদের সমস্যার জন্য ব্যবহার করব

কথায় কথায়, আমরা এই স্তরগুলি রাখতে চাই:

  • স্তর 1:32 লুকানো নিউরন, রিলিউ অ্যাক্টিভেশন
  • গোপন স্তর 2: 32 নিউরন, রিলু সক্রিয়করণ
  • আউটপুট স্তর: 1 নিউরন, সিগময়েড অ্যাক্টিভেশন

এখন আমাদের এই স্থাপত্যটি কেরাসের কাছে বর্ণনা করতে হবে। আমরা সিক্যুয়াল মডেলটি ব্যবহার করতে যাচ্ছি যার অর্থ আমাদের কেবলমাত্র উপরের স্তরগুলিকে ক্রমানুসারে বর্ণনা করতে হবে।

প্রথমে কেরাস থেকে প্রয়োজনীয় কোডটি আমদানি করা যাক:

কেরাস থেকে আমদানি করুন mod

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

মডেল = সিক্যুয়াল ([ঘন (32, অ্যাক্টিভেশন = 'রিলু', ইনপুট_শ্যাপ = (10,)), ঘন (32, অ্যাক্টিভেশন = 'রিলু'), ঘন (1, অ্যাক্টিভেশন = 'সিগময়েড'),]))

এবং ঠিক ঠিক এইভাবে উপরের কোড স্নিপেট আমাদের আর্কিটেকচারকে সংজ্ঞায়িত করেছে! উপরের কোডটি নিম্নরূপ ব্যাখ্যা করা যায়:

মডেল = সিক্যুয়াল ([...])

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

আঁটসাঁট (32, অ্যাক্টিভেশন = 'রিলু', ইনপুট_শ্যাপ = (10,)),

আমাদের কাছে 32 টি নিউরন, রিলু অ্যাক্টিভেশন সহ একটি ঘন স্তর হিসাবে আমাদের প্রথম স্তর রয়েছে এবং ইনপুট ফর্মটি 10 ​​হওয়ায় আমাদের 10 ইনপুট বৈশিষ্ট্য রয়েছে। নোট করুন যে "ঘনত্ব" একটি সম্পূর্ণ সংযুক্ত স্তরকে বোঝায় যা আমরা ব্যবহার করব।

আঁটসাঁট (32, অ্যাক্টিভেশন = 'রিলু'),

আমাদের দ্বিতীয় স্তরটিও 32 নিউরন সহ একটি ঘন স্তর, রিলু সক্রিয়করণ। নোট করুন যে আমাদের ইনপুট ফর্মটি বর্ণনা করার দরকার নেই কারণ কেরাস আমাদের প্রথম স্তরের আউটপুট থেকে অনুমান করতে পারে।

ঘন (1, অ্যাক্টিভেশন = 'সিগময়েড'),

আমাদের তৃতীয় স্তরটি 1 নিউরন, সিগমা অ্যাক্টিভেশন সহ একটি ঘন স্তর।

এবং তাই আমরা কোডে আমাদের মডেল আর্কিটেকচার (টেমপ্লেট) লিখেছি!

দ্বিতীয় পদক্ষেপ: সর্বাধিক সংখ্যা লিখুন

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

  • আপনি অনুকূলিতকরণের জন্য কোন অ্যালগরিদমটি ব্যবহার করতে চান তা নির্দেশ করুন Ind
  • কোন ক্ষতির ফাংশনটি ব্যবহার করতে হবে তা বলুন
  • ক্ষতির ক্রিয়াকলাপ ছাড়াও আপনি কী আরও মেট্রিকগুলি ট্র্যাক করতে চান তা তাকে বলুন

এই সেটিংস সহ মডেলটি কনফিগার করতে আমাদের নীচে মডেল.কম ফাইলের ফাংশনটি কল করতে হবে:

Model.compile (অপ্টিমাইজার = 'এসজিডি', ক্ষতি = 'বাইনারি_ক্রসেন্টরোপি', মেট্রিক্স = ['নির্ভুলতা'])

আমরা মডেল.কমের ফাইলের পরে বন্ধনীগুলিতে নিম্নলিখিত সেটিংসটি রেখেছি:

অপ্টিমাইজার = 'এসজেডি'

"এসজিডি" বলতে স্টোকাস্টিক গ্রেডিয়েন্ট বংশোদ্ভূতিকে বোঝায় (এখানে এটি মিনিব্যাচ গ্রেডিয়েন্ট বংশদ্ভুত বোঝায়) যা আমরা স্বজ্ঞাত ডিপ লার্নিংয়ের পর্ব 1 বি তে দেখেছি।

ক্ষতি = 'বাইনারি_ক্রসেন্টরোপি'

1 বা 0 মানের সাথে আউটপুটগুলির জন্য ক্ষতির ফাংশনটিকে বাইনারি ক্রস এনট্রপি বলা হয়।

মেট্রিক = ['নির্ভুলতা']

অবশেষে, আসুন লোকসানের কাজটি ছাড়াও নির্ভুলতাটি ট্র্যাক করি। আমাদের এই সেলটি একবার চললে আমরা অনুশীলন করতে পারি!

ডেটা প্রশিক্ষণ করা বেশ সহজ এবং আমাদের কোডের একটি লাইন লেখার প্রয়োজন:

হিস্ট = মডেল.ফিট (এক্স_ট্রেইন, ওয়াই ট্রেন, ব্যাচ_সাইজ = 32, ইপচস = 100, বৈধতা_ডাটা = (এক্স_ওয়াল, ওয়াই_ওয়াল))

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

এখন সেলটি চালানো যাক এবং এটি কীভাবে প্রশিক্ষিত হয় তা দেখুন! আপনার জুপিটার নোটবুকটি দেখতে এমন হওয়া উচিত:

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

আপনার চূড়ান্ত মডেলটি নিয়ে আপনি সন্তুষ্ট হওয়ার সাথে সাথে আমরা এটি পরীক্ষার সেটটিতে মূল্যায়ন করতে পারি। আমাদের পরীক্ষার সেটটির যথার্থতা নির্ধারণ করতে, আসুন কোডের এই স্নিপেটটি চালান:

মডেল.ভ্যালুয়েট (এক্স_েস্ট, ওয়াই টেস্ট) [1]

মডেল.ভ্যালুয়েট ফাংশনের পরে আমাদের সূচক 1 হওয়ার কারণটি হ'ল ফাংশনটি প্রথম উপাদান হিসাবে লোকসান এবং দ্বিতীয় উপাদান হিসাবে নির্ভুলতা প্রদান করে। কেবল নির্ভুলতার আউটপুট দিতে, কেবলমাত্র দ্বিতীয় আইটেমটি অ্যাক্সেস করুন (যেটি 1 দিয়ে সূচিত হয় যেহেতু প্রথম আইটেমটি 0 থেকে সূচকে শুরু হয়) starts

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

পরীক্ষার সেটে মূল্যায়ন

এবং সেখানে এটি রয়েছে, আপনি এনক্রিপ্ট করেছেন এবং আপনার প্রথম নিউরাল নেটওয়ার্ক প্রশিক্ষণ দিয়েছেন! অভিনন্দন!

সংক্ষিপ্তসার: আমাদের প্রথম নিউরাল নেটওয়ার্ক কোড করতে কোডের কয়েকটি মাত্র লাইন লেগেছিল:

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

ক্ষতি এবং নির্ভুলতার ভিজ্যুয়ালাইজ করুন

স্বজ্ঞাত ডিপ লার্নিংয়ের পর্ব 1 বি তে আমরা ওভারফিটিং এবং কিছু নিয়মিতকরণ কৌশল সম্পর্কে কথা বললাম। আমাদের মডেলটি বর্তমানে সংশোধন করা হচ্ছে কিনা তা আমরা কীভাবে জানব?

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

প্ল্যাট হিসাবে matplotlib.pyplot আমদানি করুন

তারপরে আমরা প্রশিক্ষণের ক্ষতি এবং বৈধতা হ্রাসের চিত্রটি দেখতে চাই। এটি করতে কোডের এই স্নিপেটটি চালান:

plt.plot (hist.history ['ক্ষতি']) plt.plot (হিস্ট হিস্টোরি ['val_loss']) plt.title ('মডেল ক্ষতি') plt.ylabel ('ক্ষতি') plt.xlabel ('epoch') plt.legnd (['ট্রেন', 'ভাল'], লোক = 'উপরের ডানদিকে') plt.show ()

আমরা উপরের কোড স্নিপেটের প্রতিটি লাইন ব্যাখ্যা করতে যাচ্ছি। প্রথম দুটি লাইন বলে যে আমরা ক্ষতি এবং ভাল_লাস প্লট করতে চাই। তৃতীয় লাইনটি এই চিত্রটির শিরোনাম দেয়, "মডেল লস"। চতুর্থ এবং পঞ্চম লাইনগুলি নির্দেশ করে যে y এবং x অক্ষের জন্য কোন লেবেলগুলি ব্যবহার করা উচিত। ষষ্ঠ লাইনে আমাদের চিত্রের জন্য একটি কিংবদন্তি রয়েছে। কিংবদন্তির অবস্থান শীর্ষে ডানদিকে। এবং সপ্তম লাইনটি বৃহস্পতি নোটবুককে গ্রাফটি প্রদর্শন করতে বলে।

আপনার জুপিটার নোটবুকটি দেখতে এমন কিছু হওয়া উচিত:

একটি মডেল লস গ্রাফ যা আপনার জুপিটার নোটবুকে দেখতে হবে

নিম্নলিখিত প্রশিক্ষণ সহ আমাদের প্রশিক্ষণের যথার্থতা এবং বৈধতা যথার্থতার প্রতিনিধিত্ব করতে আমরা একই কাজ করতে পারি:

plt.plot (hist.history ['acc']) plt.plot (hist.history ['val_acc']) plt.title ('মডেল নির্ভুলতা') plt.ylabel ('নির্ভুলতা') plt.xlabel ('epoch') plt.legnd (['ট্রেন', 'ভাল'], লোক = 'নিম্ন ডান') plt.show ()

আপনার এমন একটি চিত্র পাওয়া উচিত যা দেখতে এমন কিছু দেখাচ্ছে:

প্রশিক্ষণ এবং বৈধতা সেট জন্য মডেল নির্ভুলতার প্লট

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

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

আমাদের নিউরাল নেটওয়ার্কে নিয়মিতকরণ যুক্ত করা হচ্ছে

আমাদের নিউরাল নেটওয়ার্কে নিয়মিতকরণ প্রবর্তন করার জন্য, আমরা একটি নিউরাল নেটওয়ার্ক তৈরি করি যা আমাদের প্রশিক্ষণের সেটটিকে দুর্বল করে দেয়। আমরা এই মডেল 2 কল।

মডেল = = সিক্যুয়াল ([ঘন (1000, অ্যাক্টিভেশন = 'রিলু', ইনপুট_শ্যাপ = (10,)), ঘন (1000, অ্যাক্টিভেশন = 'রিলু'), ঘন (1000, অ্যাক্টিভেশন = 'রিলু'), ঘন (1000, সক্রিয়করণ = 'রিলু'), ডিচ্ট (১, অ্যাক্টিভেশন = 'সিগময়েড'),])
Model_2.compile (অপ্টিমাইজার = 'অ্যাডাম', লোকসান = 'বাইনারি_ক্রসোনট্রপি', মেট্রিকস = ['নির্ভুলতা'])
হিস্ট_2 = মডেল ৩.ফিট (এক্স_ট্রেন, ওয়াই ট্রেন, ব্যাচ_সাইজ = 32, ইপচস = 100, বৈধতা_ডাটা = (এক্স_ওয়াল, ওয়াই_ওয়াল))

এখানে আমরা একটি বৃহত্তর মডেল তৈরি করেছি এবং আমরা অ্যাডাম অপটিমাইজারটি ব্যবহার করছি। অ্যাডাম অন্যতম সাধারণ অপটিমাইজার যা স্টোকাস্টিক গ্রেডিয়েন্ট বংশোদ্ভূত কিছু অপ্টিমাইজেশন যুক্ত করে যাতে এটি কম লোকসানের সাথে দ্রুত গতিতে আসে। যদি আমরা এই কোডটি চালনা করি এবং নীচের কোডটি দিয়ে হিস্টের জন্য লোকসানের প্লটগুলি আঁকেন (নোট করুন যে কোডটি "হিস্ট" এর পরিবর্তে "হিস্ট_2" ব্যবহার ব্যতীত) একই হবে):

plt.plot (hist_2.history ['ক্ষতি']) plt.plot (hist_2.history ['val_loss']) plt.title ('মডেল ক্ষতি') plt.ylabel ('ক্ষতি') plt.xlabel ('epoch') plt.legnd (['ট্রেন', 'ভাল'], লোক = 'উপরের ডানদিকে') plt.show ()

আমরা এই জাতীয় একটি অভিনয় পেতে:

ওভার-ফিটিং মডেল জন্য ক্ষতি বক্ররেখা

এটি ওভারফিটিংয়ের স্পষ্ট লক্ষণ। প্রশিক্ষণের ক্ষতি হ্রাস পায়, তবে বৈধতা হ্রাস প্রশিক্ষণের ক্ষতির চেয়েও উপরে এবং বৃদ্ধি (যুগের ২০ এর টার্নিং পয়েন্টের পরে)। আমরা যদি নিম্নলিখিত কোড সহ নির্ভুলতার প্রতিনিধিত্ব করি:

plt.plot (hist_2.history ['acc']) plt.plot (hist_2.history ['val_acc']) plt.title ('মডেল নির্ভুলতা') plt.ylabel ('নির্ভুলতা') plt.xlabel ('epoch') plt.legnd (['ট্রেন', 'ভাল'], লোক = 'নিম্ন ডান') plt.show ()

আমরা ট্রেন এবং বৈধতা যথার্থতার মধ্যে আরও উল্লেখযোগ্য তাত্পর্য দেখতে পাচ্ছি:

আমাদের ওভার-ফিট মডেলের জন্য প্রশিক্ষণ এবং বৈধতা যথার্থতা

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

তিনটির মধ্যে আমরা এল 2 নিয়মিতকরণ এবং ব্যর্থতা এখানে অন্তর্ভুক্ত করব। আমরা এখানে অকাল বন্ধ হওয়া যুক্ত না করার কারণটি হ'ল প্রথম দুটি কৌশল ব্যবহারের পরে, বৈধতা হারাতে উপরের দেখানো ইউ-আকারটি গ্রহণ করে না এবং তাই অকাল থামানো ততটা কার্যকর হয় না।

প্রথমে, এল 2 নিয়মিতকরণ এবং ড্রপআউটের জন্য আমাদের প্রয়োজনীয় কোডটি আমদানি করা যাক:

কেরাস.লেয়ার্স থেকে কেরাস আমদানি নিয়মিত থেকে আমদানি ড্রপআউট

তারপরে আমরা আমাদের তৃতীয় মডেলটি এভাবে বর্ণনা করি:

মডেল_3 = সিক্যুয়াল ([ঘনত্ব (1000, অ্যাক্টিভেশন = 'রিলু', কর্নেল_গ্রাওলারিজার = রেগুলারাইজার্স.এল 2 (0.01), ইনপুট_শ্যাপি = (10,)), ড্রপআউট (0.3), ঘনত্ব (1000, অ্যাক্টিভেশন = 'রিলু', কার্নেল_রেগুলাইজার = regularizers.l2 (0.01)), ড্রপআউটগুলি (0.3), ঘনত্ব (1000, অ্যাক্টিভেশন = 'রিলু', কার্নেল_গ্রাওলাইজার = নিয়মিতকরণ (0.01)), ড্রপআউটস (0.3), ঘনত্ব (1000, অ্যাক্টিভেশন = ' রিলু ', কার্নেল_গ্রাওলারিজার = রেগুলারাইজার্স.এল 2 (0.01)), ড্রপআউটস (0.3), ঘনত্ব (1, অ্যাক্টিভেশন =' সিগময়েড ', কার্নেল_গ্রুলারিজার = রেগুলারাইজার্স.এল 2 (0.01))]]

আপনি কি মডেল 3 এবং মডেল 2 এর মধ্যে পার্থক্য বলতে পারবেন? দুটি প্রধান পার্থক্য রয়েছে:

পার্থক্য 1: এল 2 নিয়মিতকরণ যুক্ত করতে, নোট করুন যে আমরা আমাদের প্রতিটি ঘন স্তরগুলিতে কিছুটা অতিরিক্ত কোড যুক্ত করেছি:

কার্নেল_গ্রাওলারিজার = নিয়মিতকরণকারী.এল 2 (0.01)

এটি কেরাসকে আমাদের মোট ক্ষতির ফাংশনে এই প্যারামিটারগুলির বর্গক্ষেত্রের মানগুলি অন্তর্ভুক্ত করতে এবং ক্ষতি ফাংশনে 0.01 দিয়ে ওজন করতে বলে।

পার্থক্য 2: ড্রপআউট যুক্ত করতে আমরা একটি নতুন স্তর যুক্ত করেছি:

ড্রপআউট (0.3)

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

Model_3.compile (অপ্টিমাইজার = 'অ্যাডাম', লোকসান = 'বাইনারি_ক্রসোনট্রপি', মেট্রিকস = ['নির্ভুলতা'])
হিস্ট_3 = মডেল_3.ফিট (এক্স_ট্রেইন, ওয়াই ট্রেন, ব্যাচ_সাইজ = 32, ইপচস = 100, বৈধতা_ডাটা = (এক্স_ওয়াল, ওয়াই_ওয়াল))

এখন আসুন ক্ষতি এবং নির্ভুলতার গ্রাফগুলি আঁকুন। আপনি দেখতে পাবেন যে শুরুতে লোকসানটি অনেক বেশি এবং এটি হ'ল আমরা আমাদের ক্ষতির কার্যকারিতা পরিবর্তন করেছি। ক্ষতির জন্য উইন্ডোটি 0 এবং 1.2 এর মধ্যে প্রসারিত করার জন্য অঙ্কনের জন্য, অঙ্কন করার সময় আমরা কোডের একটি অতিরিক্ত লাইন (plt.ylim) যুক্ত করি:

plt.plot (hist_3.history ['ক্ষতি']) plt.plot (hist_3.history ['val_loss']) plt.title ('মডেল ক্ষতি') plt.ylabel ('ক্ষতি') plt.xlabel ('epoch') plt.legnd (['ট্রেন', 'ভাল'], লোক = 'উচ্চ ডান') plt.ylim (উপরে = 1,2, নীচে = 0) plt.show ()

আপনি একটি ক্ষতির গ্রাফ দেখতে পাবেন যা দেখতে দেখতে:

আপনি দেখতে পাচ্ছেন যে বৈধতার ক্ষতি আমাদের প্রশিক্ষণের ক্ষতির কাছাকাছি। কোডের অনুরূপ স্নিপেট ব্যবহার করে নির্ভুলতার প্লট করা যাক:

plt.plot (hist_3.history ['acc']) plt.plot (hist_3.history ['val_acc']) plt.title ('মডেল নির্ভুলতা') plt.ylabel ('নির্ভুলতা') plt.xlabel ('epoch') plt.legnd (['ট্রেন', 'ভাল'], লোক = 'নিম্ন ডান') plt.show ()

এবং আমরা এর মতো একটি প্লট পেয়ে যাব:

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

সংক্ষিপ্তসার: অত্যধিক মান নিয়ন্ত্রণের জন্য, আমরা আমাদের মডেলটিতে নিম্নলিখিত কৌশলগুলি প্রোগ্রাম করতে পারি, প্রতিটি কোডের প্রায় এক লাইনের সাথে:

  • এল 2 নিয়মিতকরণ
  • বের হও

যদি আমরা প্রশিক্ষণ / বৈধতার ক্ষয়ক্ষতি এবং যথার্থতাটি কল্পনা করি তবে আমরা দেখতে পাচ্ছি যে এই সংযোজনগুলি অত্যধিক মানায় অবদান রাখে!

একীভূত সংক্ষিপ্তসার:

এই পোস্টে আমরা পাইথন কোড এর জন্য লিখেছি:

  • পরীক্ষা এবং প্রক্রিয়া তথ্য
  • আমাদের নিউরাল নেটওয়ার্ক তৈরি করুন এবং প্রশিক্ষণ দিন
  • ক্ষতি এবং নির্ভুলতার ভিজ্যুয়ালাইজ করুন
  • আমাদের নিউরাল নেটওয়ার্কে নিয়মিতকরণ যুক্ত করুন

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

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

এখানে সিএনএন দিয়ে শুরু করুন: স্বজ্ঞাত ডিপ লার্নিং পার্ট 2: কম্পিউটার ভিশনের জন্য সিএনএন

লেখক সম্পর্কে:

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