টেনসরফ্লো টিউটোরিয়াল - টেনসরফ্লো ব্যবহার করে গভীর শেখা



টেনসরফ্লো টিউটোরিয়াল সিরিজের তৃতীয় ব্লগ। এটিতে টেনসরফ্লো এর সমস্ত বুনিয়াদি অন্তর্ভুক্ত রয়েছে। এটি কীভাবে একটি সাধারণ রৈখিক মডেল তৈরি করবেন সে সম্পর্কেও আলোচনা করে।

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

  • টেনসরফ্লো কী
  • টেনসরফ্লো কোড বুনিয়াদি
  • টেনসরফ্লো ইউজকেস

টেনসর কি?

এই টেন্সরফ্লো টিউটোরিয়ালে, টেনসরফ্লো সম্পর্কে কথা বলার আগে, আসুন প্রথমে বুঝতে পারি টেনার কি? । টেনার্স গভীর শিক্ষায় ডেটা উপস্থাপনের জন্য একটি ডি ফ্যাক্টো ছাড়া আর কিছুই নয়।





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

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

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



টেনসরফ্লোতে, টেনসর শব্দটি উপাত্তকে বহুমাত্রিক অ্যারে হিসাবে উপস্থাপনাকে বোঝায় যেখানে শব্দ প্রবাহ বলতে বোঝায় যে উপরের চিত্রটিতে দেখানো হয়েছে তেমন কোনও এক দশকের উপর সঞ্চালিত ক্রিয়াকলাপ।

এখন আমরা টেনসরফ্লো সম্পর্কে যথেষ্ট পটভূমি .েকে রেখেছি।



পরবর্তী, এই টেনসরফ্লো টিউটোরিয়ালে আমরা টেনসরফ্লো কোড-বেসিকগুলি সম্পর্কে আলোচনা করব।

টেনসরফ্লো টিউটোরিয়াল: কোড বুনিয়াদি

মূলত, টেনসরফ্লো প্রোগ্রাম লেখার সামগ্রিক প্রক্রিয়াতে দুটি পদক্ষেপ জড়িত:

  1. একটি গণনামূলক গ্রাফ তৈরি করা
  2. একটি গণনামূলক গ্রাফ চলছে

উপরের দুটি ধাপ একের পর এক আপনাদের বুঝিয়ে দিই:

1. একটি গণনামূলক গ্রাফ তৈরি করা

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

উপরের কম্পিউটেশনাল গ্রাফের ব্যাখ্যা:

  • ধ্রুব নোডধ্রুবক মানগুলি সংরক্ষণ করতে ব্যবহৃত হয় কারণ এটি শূন্য ইনপুট লাগে, তবে আউটপুট হিসাবে সঞ্চিত মানগুলি উত্পাদন করে। উপরের উদাহরণে, ক এবং খ যথাক্রমে 5 এবং 6 এর মান সহ ধ্রুবক নোড।

  • নোড সি বি এর সাথে ধীরে ধীরে নোড এ এর ​​গুণমানকে পরিচালনা করে। সুতরাং, নোড সি সঞ্চালনের ফলে কনস্ট নোড একটি এবং বিয়ের গুণফল হবে।

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

এখানে আমরা কেবল গণনা বর্ণনা করি, এটি কোনওরূপে গণনা করে না, এটি কোনও মান রাখে না, এটি কেবল আপনার কোডে সুনির্দিষ্ট ক্রিয়াকলাপগুলি সংজ্ঞায়িত করে।

উদাহরণস্বরূপ প্রোগ্রাম সহ সি ++ এ গতিশীল মেমরি বরাদ্দ

2. একটি গণনামূলক গ্রাফ চালানো

আসুন আমরা গণনা গ্রাফের পূর্ববর্তী উদাহরণটি গ্রহণ করি এবং এটি কীভাবে কার্যকর করতে হয় তা বুঝতে পারি। নিম্নলিখিত উদাহরণ থেকে কোড নিম্নলিখিত:

উদাহরণ 1:

tf হিসাবে টেনস্রোফ্লো আমদানি করুন # একটি গ্রাফ তৈরি করুন a = tf.constant (5.0) বি = tf.constant (6.0) সি = এ * বি

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

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

# সেশন অবজেক্টটি সেস = টিএফ.সেশন () তৈরি করুন # একটি সেশনের মধ্যে গ্রাফটি চালান এবং আউটপুটটি একটি ভেরিয়েবল আউটপুট সংরক্ষণ করুন_সি = সিএন (সি) # নোড সি প্রিন্টের আউটপুট মুদ্রণ করুন (আউটপুট_সি) # সেশনটি এখানে বন্ধ করুন কিছু সংস্থান মুক্ত করুন sess.close ()
 আউটপুট: 30

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

ধ্রুবক, স্থানধারক এবং ভেরিয়েবলগুলি

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

স্থানধারক:

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

tf হিসাবে টেনসরফ্লো আমদানি করুন # স্থানধারক a = tf তৈরি করা। স্থানধারক (tf.float32) বি = টিএফ। স্থানধারক (tf.float32) # গুণমান ক্রিয়াকলাপ বরাদ্দ করা হচ্ছে w.r.t. a & ampamp b to node mul mul = a * b # সেশন অবজেক্ট sess = tf.Session () # টি এবং m যথাক্রমে আউটপুট = sess.run এর জন্য [1, 3] [2, 4] মান পাস করে মুল কার্যকর করা হচ্ছে ( মুল, {এ: [১,৩], বি: [২, ৪] print) মুদ্রণ ('বহুগুণে আব:', আউটপুট)
 আউটপুট: [২। 12.]

মনে রাখার বিষয়গুলি স্থানধারক:

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

এখন, আসুন এবং এগিয়ে যান - ভেরিয়েবল কি?

ঠিক সময়ে সংকলক জাভা

পরিবর্তনশীল

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

var = tf. পরিবর্তনশীল ([0.4], dtype = tf.float32)

বিঃদ্রঃ:

  • আপনি যদি স্পষ্টভাবে ডেটা প্রকার সরবরাহ না করেন তবে টেনসরফ্লো প্রারম্ভিক মানের থেকে ধ্রুবক / পরিবর্তনশীল প্রকারটি নির্ধারণ করবে।
  • টেনসরফ্লোতে নিজস্ব অনেক ধরণের ডেটা রয়েছে tf.float32 , tf.int32 ইত্যাদি আপনি তাদের সমস্ত উল্লেখ করতে পারেন এখানে

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

init = tf.global_variables_initializer () sess.run (init)

সর্বদা মনে রাখবেন কোনও গ্রাফ প্রথমবার ব্যবহারের আগে একটি পরিবর্তনশীল অবশ্যই শুরু করতে হবে।

বিঃদ্রঃ: টেনসরফ্লো ভেরিয়েবলগুলি ইন-মেমোরি বাফারগুলিতে থাকে যা টেনসরগুলি ধারণ করে, তবে গ্রাফ চালিত হলে এবং তাত্ক্ষণিকভাবে মুছে ফেলা হলে কেবল তাত্ক্ষণিকভাবে স্বাভাবিক টেনারগুলির বিপরীতে ভেরিয়েবলগুলি গ্রাফের একাধিক মৃত্যুদন্ড কার্যকর করতে পারে।

এখন যেহেতু আমরা টেনসরফ্লোয়ের পর্যাপ্ত বেসিকগুলি কভার করেছি, আসুন আমরা এগিয়ে চলুন এবং টেনসরফ্লো ব্যবহার করে লিনিয়ার রিগ্রেশন মডেলটি কীভাবে প্রয়োগ করব তা বুঝতে পারি।

টেনসরফ্লো ব্যবহার করে লিনিয়ার রিগ্রেশন মডেল

লিনিয়ার রিগ্রেশন মডেলটি নীচে দেখানো হিসাবে রৈখিক রিগ্রেশন সমীকরণটি ব্যবহার করে অন্য ভেরিয়েবলের (ইনডিপেন্ডেন্ট ভেরিয়েবল) জ্ঞাত মান থেকে একটি ভেরিয়েবলের (ডিপেন্ডেন্ট ভেরিয়েবল) অজানা মানের পূর্বাভাস দেওয়ার জন্য ব্যবহৃত হয়:

সুতরাং, লিনিয়ার মডেল তৈরি করার জন্য আপনার প্রয়োজন:

  1. নির্ভরশীল বা আউটপুট পরিবর্তনশীল (Y)
  2. Opeাল পরিবর্তনশীল (ডাব্লু)
  3. Y - ইন্টারসেপ্ট বা বায়াস (খ)
  4. স্বতন্ত্র বা ইনপুট পরিবর্তনশীল (এক্স)

সুতরাং, আসুন টেনসরফ্লো ব্যবহার করে রৈখিক মডেল তৈরি করা শুরু করি:

মডেল ভিউ নিয়ন্ত্রক উদাহরণ জাভা

নীচে দেওয়া বোতামটি ক্লিক করে কোডটি অনুলিপি করুন:

# প্রাথমিক মান সহ 0.4 ডাব্লু = tf. পরিবর্তনশীল ([। 4], tf.float32) হিসাবে প্যারামিটার স্লোপের (ডাব্লু) জন্য পরিবর্তনশীল তৈরি করা হচ্ছে # প্যারামিটার বায়াস (বি) জন্য প্রাথমিক মান -0.4 বি = tf. পরিবর্তনশীল (পরিবর্তনশীল) [-0.4], tf.float32) # ইনপুট বা স্বতন্ত্র ভেরিয়েবল সরবরাহের জন্য স্থানধারক তৈরি করা, xx = tf. placeholder দ্বারা চিহ্নিত (tf.float32) # লিনিয়ার রেগ্রেশন সমীকরণ লিনিয়ার_মডেল = ডব্লু * এক্স + বি # সমস্ত পরিবর্তনশীল sess = tf.Session () init = tf.global_variables_initializer () sess.run (init) # আউটপুট আর্ট গণনা করার জন্য রিগ্রেশন মডেল চালানো হচ্ছে এক্স মানগুলি প্রিন্ট সরবরাহ করতে (sess.run (লিনিয়ার_মডেল {x: [1, 2, 3, 4]}))

আউটপুট:

[0. 0.40000001 0.80000007 1.20000005]

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

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

এখন আসুন আমরা বুঝতে পারি যে আমি কীভাবে রেজিস্ট্রেশন মডেলের জন্য উল্লিখিত কার্যকারিতাটি আমার কোডের সাথে অন্তর্ভুক্ত করতে পারি।

ক্ষতির কার্যকারিতা - মডেল বৈধকরণ

ক্ষতির ফাংশনটি পরিমাপ করে যে মডেলের বর্তমান আউটপুটটি কাঙ্ক্ষিত বা লক্ষ্যমাত্রা আউটপুট থেকে কতটা পৃথক। আমি আমার লিনিয়ার রিগ্রেশন মডেলের জন্য সর্বাধিক স্কোয়ার ত্রুটি বা এসএসই নামে পরিচিত হিসাবে ব্যবহৃত ক্ষতির ফাংশনটি ব্যবহার করব। এসএসই গণনা w.r.t. মডেল আউটপুট (লিনিয়ার_মডেল দ্বারা প্রতিনিধিত্ব করা) এবং পছন্দসই বা টার্গেট আউটপুট (y) হিসাবে:

y = tf.placeholder (tf.float32) ত্রুটি = লিনিয়ার_মডেল - y স্কোয়ারড_অরফারস = tf.square (ত্রুটি) ক্ষতি = tf.reduce_sum (স্কোয়ার_আরফারস) মুদ্রণ (sess.run (ক্ষতি, {x: [1,2,3,4 ], y: [2, 4, 6, 8]})
 আউটপুট: 90.24

আপনি দেখতে পাচ্ছেন যে, আমরা একটি উচ্চ ক্ষতির মান পাচ্ছি। অতএব, আমাদের প্রাপ্ত হওয়া ত্রুটিটি হ্রাস করার জন্য আমাদের আমাদের ওজন (ডাব্লু) এবং বায়াস (খ) সামঞ্জস্য করতে হবে।

টিf.train API - মডেল প্রশিক্ষণ Training

টেনসরফ্লো সরবরাহ করে অপ্টিমাইজার যে ক্ষতির ক্রিয়া বা ত্রুটি হ্রাস করতে ধীরে ধীরে প্রতিটি পরিবর্তনশীল পরিবর্তন করে। সবচেয়ে সহজ অপটিমাইজার গ্রেডিয়েন্ট বংশোদ্ভূত । এটি সেই ভেরিয়েবলের সাথে সম্মানের সাথে ক্ষতির ডেরাইভেটিভের परिमाण অনুযায়ী প্রতিটি পরিবর্তনশীলকে পরিবর্তন করে।

# গ্রেডিয়েন্ট বংশোদ্ভূত অপ্টিমাইজার অপ্টিমাইজার = tf.train. গ্রেডিয়েন্টডেসেন্টঅপটিমাইজার (0.01) ট্রেন = অপ্টিমাইজার.মিনিমাইজ (ক্ষয়) এর সীমার (1000): সেস.আরুন (ট্রেন, {x: [1, 2, 3, 4], y: [2, 4, 6, 8] print) মুদ্রণ (sess.run ([ডাব্লু, বি]))
 আউটপুট: [অ্যারে ([1.99999964], dtype = ফ্লোট 32), অ্যারে ([9.86305167e-07], টাইপ = ফ্লোট 32)]

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

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

আমাদের জন্য একটি প্রশ্ন আছে? দয়া করে মন্তব্য বিভাগে এটি উল্লেখ করুন এবং আমরা আপনার কাছে ফিরে আসব।