মডেল এবং স্তর

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

TensorFlow.js-এ একটি মেশিন লার্নিং মডেল তৈরি করার দুটি উপায় রয়েছে:

  1. স্তরসমূহ API ব্যবহার করে যেখানে আপনি একটি মডেল স্তর ব্যবহার নির্মাণ।
  2. যেমন নিম্ন স্তরের অপস সঙ্গে কোর API ব্যবহার করে tf.matMul() , tf.add() , ইত্যাদি

প্রথমে, আমরা লেয়ার এপিআই দেখব, যা মডেল তৈরির জন্য একটি উচ্চ-স্তরের API। তারপর, আমরা দেখাব কিভাবে কোর API ব্যবহার করে একই মডেল তৈরি করা যায়।

লেয়ার এপিআই দিয়ে মডেল তৈরি করা

অনুক্রমিক মডেল এবং একটি কার্মিক মডেল আছে: একটি মডেল স্তরসমূহ API ব্যবহার করে তৈরি করতে দুটি উপায় আছে। পরবর্তী দুটি বিভাগ প্রতিটি ধরনের আরো ঘনিষ্ঠভাবে তাকান.

অনুক্রমিক মডেল

মডেল সবচেয়ে সাধারণ ধরন Sequential মডেল, যা স্তর একটি রৈখিক স্ট্যাক হয়। আপনি একটি তৈরি করতে পারেন Sequential করার স্তর একটি তালিকা ক্ষণস্থায়ী দ্বারা মডেল sequential() ফাংশন:

const model = tf.sequential({
 layers: [
   tf.layers.dense({inputShape: [784], units: 32, activation: 'relu'}),
   tf.layers.dense({units: 10, activation: 'softmax'}),
 ]
});

অথবা মাধ্যমে add() পদ্ধতি:

const model = tf.sequential();
model.add(tf.layers.dense({inputShape: [784], units: 32, activation: 'relu'}));
model.add(tf.layers.dense({units: 10, activation: 'softmax'}));

গুরুত্বপূর্ণ: মডেল প্রথম স্তর একটি প্রয়োজন inputShape । নিশ্চিত যখন প্রদানের আপনি ব্যাচ আকার বাদ করুন inputShape । উদাহরণস্বরূপ, যদি আপনি আকৃতি মডেল tensors ভোজন করার পরিকল্পনা [B, 784] , যেখানে B কোনো ব্যাচ আকার হতে পারে, উল্লেখ inputShape যেমন [784] যখন মডেল তৈরি করা।

আপনি মাধ্যমে মডেল স্তর অ্যাক্সেস করতে পারেন model.layers , এবং আরো নির্দিষ্টভাবে model.inputLayers এবং model.outputLayers

কার্যকরী মডেল

একটি তৈরি করতে আরেকটি উপায় LayersModel মারফত tf.model() ফাংশন। মধ্যে কী পার্থক্য tf.model() এবং tf.sequential() যে tf.model() , আপনি স্তর একটি অবাধ গ্রাফ তৈরি করার অনুমতি দেয় যতদিন তারা চক্র হবে না।

এখানে একটি কোড স্নিপেট যে ব্যবহার করে উপরে উল্লেখিত হিসাবে একই মডেল সংজ্ঞায়িত হয় tf.model() এপিআই:

// Create an arbitrary graph of layers, by connecting them
// via the apply() method.
const input = tf.input({shape: [784]});
const dense1 = tf.layers.dense({units: 32, activation: 'relu'}).apply(input);
const dense2 = tf.layers.dense({units: 10, activation: 'softmax'}).apply(dense1);
const model = tf.model({inputs: input, outputs: dense2});

আমরা কল apply() যাতে এটা আরেকটি স্তর আউটপুট সাথে সংযোগ করার জন্য প্রতিটি স্তরে। ফল apply() এই ক্ষেত্রে একটি হল SymbolicTensor , যা একটি মত কাজ করে Tensor কিন্তু কোনো কংক্রিট মান ছাড়াই।

লক্ষ্য করুন অনুক্রমিক মডেল অসদৃশ, আমরা একটি তৈরি SymbolicTensor মাধ্যমে tf.input() পরিবর্তে একটি প্রদান inputShape প্রথম স্তরে।

apply() এছাড়াও আপনি একটি কংক্রিট দিতে পারেন Tensor আপনি একটি কংক্রিট পাস, Tensor এটি:

const t = tf.tensor([-2, 1, 0, 5]);
const o = tf.layers.activation({activation: 'relu'}).apply(t);
o.print(); // [0, 1, 0, 5]

বিচ্ছিন্নভাবে স্তরগুলি পরীক্ষা করার এবং তাদের আউটপুট দেখার সময় এটি কার্যকর হতে পারে।

শুধু একটি অনুক্রমিক মডেল মতো, আপনি মাধ্যমে মডেল স্তর অ্যাক্সেস করতে পারেন model.layers , এবং আরো নির্দিষ্টভাবে model.inputLayers এবং model.outputLayers

বৈধতা

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

মডেল সারাংশ

ফোন করুন model.summary() মডেল, যা অন্তর্ভুক্ত একটি দরকারী সারসংক্ষেপ মুদ্রণ করতে:

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

আমরা উপরে সংজ্ঞায়িত মডেলের জন্য, আমরা কনসোলে নিম্নলিখিত আউটপুট পাই:

স্তর (প্রকার) আউটপুট আকৃতি পরম #
ঘন_ঘন১ (ঘন) [শূন্য, 32] 25120
ঘন_ঘন২ (ঘন) [শূন্য, 10] 330
মোট প্যারাম: 25450
প্রশিক্ষণযোগ্য প্যারামস: 25450
অ-প্রশিক্ষণযোগ্য প্যারামস: 0

উল্লেখ্য null স্তর আউটপুট আকার মান: একটি অনুস্মারক যে মডেল ইনপুট দূরতম মাত্রা, যা এই ক্ষেত্রে কারণে নমনীয় হতে পারে যেমন একটি ব্যাচ আকার হিসাবে কাজ করবে null মান।

সিরিয়ালাইজেশন

একটি ব্যবহার প্রধান সুবিধা হল LayersModel নিম্ন স্তরের এপিআই উপর সংরক্ষণ করুন এবং একটি মডেল লোড করার ক্ষমতা নেই। একজন LayersModel বিষয়ে জানেন:

  • মডেলের আর্কিটেকচার, আপনাকে মডেলটি পুনরায় তৈরি করার অনুমতি দেয়।
  • মডেলের ওজন
  • প্রশিক্ষণ কনফিগারেশন (ক্ষতি, অপ্টিমাইজার, মেট্রিক্স)।
  • অপ্টিমাইজারের অবস্থা, আপনাকে প্রশিক্ষণ পুনরায় শুরু করার অনুমতি দেয়।

একটি মডেল সংরক্ষণ বা লোড করার জন্য কোডের মাত্র 1 লাইন:

const saveResult = await model.save('localstorage://my-model-1');
const model = await tf.loadLayersModel('localstorage://my-model-1');

উপরের উদাহরণটি ব্রাউজারে স্থানীয় স্টোরেজে মডেলটিকে সংরক্ষণ করে। দেখুন model.save() documentation এবং সংরক্ষণ ও লোড কিভাবে বিভিন্ন মাধ্যম সংরক্ষণ করতে জন্য নির্দেশিকা (যেমন ফাইল সঞ্চয়স্থান, IndexedDB , একটি ব্রাউজার ডাউনলোড, ইত্যাদি আরম্ভ)

কাস্টম স্তর

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

class SquaredSumLayer extends tf.layers.Layer {
 constructor() {
   super({});
 }
 // In this case, the output is a scalar.
 computeOutputShape(inputShape) { return []; }

 // call() is where we do the computation.
 call(input, kwargs) { return input.square().sum();}

 // Every layer needs a unique name.
 getClassName() { return 'SquaredSum'; }
}

এটি পরীক্ষা করার জন্য, আমরা কল করতে পারেন apply() একটি কংক্রিট টেন্সর সঙ্গে পদ্ধতি:

const t = tf.tensor([-2, 1, 0, 5]);
const o = new SquaredSumLayer().apply(t);
o.print(); // prints 30

গুরুত্বপূর্ণ: আপনি যদি একটি কাস্টম স্তর যোগ করেন, তাহলে আপনি একটি মডেলকে সিরিয়ালাইজ করার ক্ষমতা হারাবেন৷

কোর API দিয়ে মডেল তৈরি করা

এই গাইডের শুরুতে, আমরা উল্লেখ করেছি যে TensorFlow.js-এ একটি মেশিন লার্নিং মডেল তৈরি করার দুটি উপায় রয়েছে।

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

আপনি যখনই কোর API ব্যবহার করতে চাইতে পারেন:

  • আপনি সর্বোচ্চ নমনীয়তা বা নিয়ন্ত্রণ প্রয়োজন.
  • আপনার সিরিয়ালাইজেশনের প্রয়োজন নেই, বা আপনার নিজস্ব সিরিয়ালাইজেশন যুক্তি প্রয়োগ করতে পারেন।

কোর API এ মডেল মাত্র ফাংশন এক বা তার বেশি সময় নিতে হয় Tensors এবং একটি ফিরতি Tensor । কোর API ব্যবহার করে উপরে লেখা একই মডেলটি এইরকম দেখাচ্ছে:

// The weights and biases for the two dense layers.
const w1 = tf.variable(tf.randomNormal([784, 32]));
const b1 = tf.variable(tf.randomNormal([32]));
const w2 = tf.variable(tf.randomNormal([32, 10]));
const b2 = tf.variable(tf.randomNormal([10]));

function model(x) {
  return x.matMul(w1).add(b1).relu().matMul(w2).add(b2).softmax();
}

মনে রাখবেন যে কোর API-এ আমরা মডেলের ওজন তৈরি এবং শুরু করার জন্য দায়ী। প্রতিটি ওজন একটি দ্বারা ব্যাক হয় Variable যা TensorFlow.js করার সংকেত যে, এই tensors learnable হয়। আপনি একটি তৈরি করতে পারেন Variable ব্যবহার tf.variable () এবং একটি বিদ্যমান কথা প্রসঙ্গে Tensor

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