কেরাস ব্যবহারকারীদের জন্য TensorFlow.js লেয়ার API

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

# Python:
import keras
import numpy as np

# Build and compile model.
model = keras.Sequential()
model.add(keras.layers.Dense(units=1, input_shape=[1]))
model.compile(optimizer='sgd', loss='mean_squared_error')

# Generate some synthetic data for training.
xs = np.array([[1], [2], [3], [4]])
ys = np.array([[1], [3], [5], [7]])

# Train model with fit().
model.fit(xs, ys, epochs=1000)

# Run inference with predict().
print(model.predict(np.array([[5]])))
// JavaScript:
import * as tf from '@tensorlowjs/tfjs';

// Build and compile model.
const model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [1]}));
model.compile({optimizer: 'sgd', loss: 'meanSquaredError'});

// Generate some synthetic data for training.
const xs = tf.tensor2d([[1], [2], [3], [4]], [4, 1]);
const ys = tf.tensor2d([[1], [3], [5], [7]], [4, 1]);

// Train model with fit().
await model.fit(xs, ys, {epochs: 1000});

// Run inference with predict().
model.predict(tf.tensor2d([[5]], [1, 1])).print();

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

কনস্ট্রাক্টররা জাভাস্ক্রিপ্ট অবজেক্টকে কনফিগারেশন হিসেবে নেয়

উপরোক্ত উদাহরণে থেকে নিম্নোক্ত পাইথন এবং JavaScript লাইন তুলনা করুন: তারা উভয় একটি তৈরি ঘন স্তর।

# Python:
keras.layers.Dense(units=1, inputShape=[1])
// JavaScript:
tf.layers.dense({units: 1, inputShape: [1]});

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

মডেল বর্গ, যেমন, কিছু পদ্ধতি Model.compile() , এছাড়াও ইনপুট হিসাবে একটি JavaScript কনফিগারেশন বস্তুর নিতে। যাইহোক, মনে রাখবেন যে Model.fit() , Model.evaluate() এবং Model.predict() একটু ভিন্ন। যেহেতু এই পদ্ধতি বাধ্যতামূলক নেওয়া x (বৈশিষ্ট্য) এবং y (লেবেল বা লক্ষ্যমাত্রা) ইনপুট হিসাবে ডাটা; x এবং y অবস্থানগত আর্গুমেন্ট আসন্ন কনফিগারেশন বস্তু শব্দ আর্গুমেন্ট ভূমিকা পালন করে থেকে আলাদা। উদাহরণ স্বরূপ:

// JavaScript:
await model.fit(xs, ys, {epochs: 1000});

Model.fit() async

Model.fit() প্রাথমিক পদ্ধতি যা ব্যবহারকারীদের TensorFlow.js মডেল প্রশিক্ষণ সঞ্চালন হয়। এই পদ্ধতিটি প্রায়শই দীর্ঘস্থায়ী হতে পারে, সেকেন্ড বা মিনিটের জন্য স্থায়ী হতে পারে। অতএব, আমরা কাজে লাগাতে async জাভাস্ক্রিপ্ট ভাষার বৈশিষ্ট্য, যাতে এই ফাংশন একটি উপায় যখন ব্রাউজারে চলমান যে প্রধান UI 'তে থ্রেড ব্লক করে না ব্যবহার করা যাবে। এই যেমন জাভাস্ক্রিপ্ট মধ্যে অন্যান্য সম্ভাব্য দীর্ঘক্ষন ধরে চলা ফাংশন, অনুরূপ async আনা । লক্ষ্য করুন async একটি কনস্ট্রাক্ট যে পাইথন মধ্যে উপস্থিত না। যদিও fit() Keras পদ্ধতি একটি ইতিহাস বস্তুর ফেরৎ, সহযোগীর fit() জাভাস্ক্রিপ্ট পদ্ধতি একটি ফেরৎ প্রতিশ্রুতি ইতিহাস, যা হতে পারে অপেক্ষায় রয়েছেন (উপরে উদাহরণ হিসাবে) ইডি বা পদ্ধতি তারপর () ব্যবহার করা হয়েছে।

TensorFlow.js এর জন্য কোন NumPy নেই

পাইথন Keras ব্যবহারকারীদের প্রায়ই ব্যবহার NumPy যেমন উপরোক্ত উদাহরণের 2D tensors উৎপাদিত মতো মৌলিক সাংখ্যিক এবং অ্যারে অপারেশন, সঞ্চালন।

# Python:
xs = np.array([[1], [2], [3], [4]])

TensorFlow.js-এ, এই ধরনের মৌলিক সাংখ্যিক ক্রিয়াকলাপগুলি প্যাকেজের সাথেই করা হয়। উদাহরণ স্বরূপ:

// JavaScript:
const xs = tf.tensor2d([[1], [2], [3], [4]], [4, 1]);

tf.* নামস্থান যেমন ম্যাট্রিক্স গুণ যেমন অ্যারে এবং রৈখিক বীজগণিত অপারেশনের জন্য অন্যান্য কার্যাবলী একটি নম্বর প্রদান করে। দেখুন TensorFlow.js কোর ডকুমেন্টেশন দেখুন।

ফ্যাক্টরি পদ্ধতি ব্যবহার করুন, কনস্ট্রাক্টর নয়

পাইথনে এই লাইনটি (উপরের উদাহরণ থেকে) একটি কনস্ট্রাক্টর কল:

# Python:
model = keras.Sequential()

যদি জাভাস্ক্রিপ্টে কঠোরভাবে অনুবাদ করা হয়, তাহলে সমতুল্য কনস্ট্রাক্টর কলটি নিচের মত দেখাবে:

// JavaScript:
const model = new tf.Sequential();  // !!! DON'T DO THIS !!!

যাইহোক, আমরা "নতুন" কনস্ট্রাক্টর ব্যবহার না করার সিদ্ধান্ত নিয়েছি কারণ 1) "নতুন" কীওয়ার্ড কোডটিকে আরও ফুলিয়ে তুলবে এবং 2) "নতুন" কনস্ট্রাক্টরকে জাভাস্ক্রিপ্টের একটি "খারাপ অংশ" হিসাবে বিবেচনা করা হয়: একটি সম্ভাব্য ক্ষতি, হিসাবে মধ্যে যুক্তি দেওয়া হয় ভালো আর্জেন্টিনা: জাভাস্ক্রিপ্ট । TensorFlow.js-এ মডেল এবং স্তর তৈরি করতে, আপনি ফ্যাক্টরি পদ্ধতিগুলিকে কল করেন, যার নাম নিম্ন ক্যামেলকেস রয়েছে, উদাহরণস্বরূপ:

// JavaScript:
const model = tf.sequential();

const layer = tf.layers.batchNormalization({axis: 1});

অপশন স্ট্রিং এর মান হল LowerCamelCase, snake_case নয়

জাভাস্ক্রিপ্ট, এটা প্রতীক নামের জন্য ব্যবহার উট ক্ষেত্রে বেশি দেখা যায় (যেমন, দেখতে গুগল জাভাস্ক্রিপ্ট স্টাইল গাইড ), (Keras মধ্যে যেমন) পাইথন, যেখানে সাপ ক্ষেত্রে সাধারণ সঙ্গে তুলনা করেন। যেমন, আমরা নিম্নলিখিত সহ বিকল্পগুলির জন্য স্ট্রিং মানগুলির জন্য LowerCamelCase ব্যবহার করার সিদ্ধান্ত নিয়েছি:

  • DataFormat, যেমন, channelsFirst পরিবর্তে channels_first
  • সূচনাকারী, যেমন, glorotNormal পরিবর্তে glorot_normal
  • লস এবং বৈশিষ্ট্যের মান, যেমন, meanSquaredError পরিবর্তে mean_squared_error , categoricalCrossentropy পরিবর্তে categorical_crossentropy

উদাহরণস্বরূপ, উপরের উদাহরণের মতো:

// JavaScript:
model.compile({optimizer: 'sgd', loss: 'meanSquaredError'});

মডেল সিরিয়ালাইজেশন এবং ডিসিরিয়ালাইজেশনের বিষয়ে, নিশ্চিত থাকুন। TensorFlow.js-এর অভ্যন্তরীণ প্রক্রিয়া নিশ্চিত করে যে JSON অবজেক্টে স্নেক কেস সঠিকভাবে পরিচালনা করা হয়, যেমন, পাইথন কেরাস থেকে পূর্বপ্রশিক্ষিত মডেল লোড করার সময়।

প্রয়োগ () দিয়ে লেয়ার অবজেক্ট চালান, তাদের ফাংশন হিসাবে কল করে নয়

Keras, একটি লেয়ার বস্তুর হয়েছে __call__ পদ্ধতি বর্ণিত। তাই ব্যবহারকারী বস্তুটিকে ফাংশন হিসাবে কল করে স্তরের যুক্তিকে আহ্বান করতে পারে, যেমন,

# Python:
my_input = keras.Input(shape=[2, 4])
flatten = keras.layers.Flatten()

print(flatten(my_input).shape)

এই পাইথন সিনট্যাক্স চিনি TensorFlow.js এ apply() পদ্ধতি হিসাবে প্রয়োগ করা হয়েছে:

// JavaScript:
const myInput = tf.input({shape: [2, 4]});
const flatten = tf.layers.flatten();

console.log(flatten.apply(myInput).shape);

Layer.apply() কংক্রিট টেনসরের উপর অপরিহার্য (আগ্রহী) মূল্যায়ন সমর্থন করে

বর্তমানে, Keras, কল পদ্ধতিটি কেবল উপর কাজ করতে পারে (পাইথন) TensorFlow এর tf.Tensor বস্তু, যা প্রতীকী এবং না প্রকৃত সাংখ্যিক মান রাখা (TensorFlow ব্যাকএন্ড অভিমানী)। পূর্ববর্তী বিভাগে উদাহরণে এটি দেখানো হয়েছে। যাইহোক, TensorFlow.js-এ, স্তরগুলির প্রয়োগ() পদ্ধতি প্রতীকী এবং অপরিহার্য উভয় মোডে কাজ করতে পারে। যদি apply() একটি SymbolicTensor (tf.Tensor ক্লোজ উপমা) সঙ্গে প্রার্থনা করা হয়, ফিরতি মূল্য একটি SymbolicTensor হবে। এটি সাধারণত মডেল বিল্ডিংয়ের সময় ঘটে। কিন্তু যদি apply() প্রকৃত কংক্রিট টেন্সর মান প্রার্থনা করা হয়, এটা একটি কংক্রিট টেন্সর ফিরে আসবে। উদাহরণ স্বরূপ:

// JavaScript:
const flatten = tf.layers.flatten();

flatten.apply(tf.ones([2, 3, 4])).print();

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

অপ্টিমাইজাররা ট্রেনের নিচে আছে। , অপ্টিমাইজার নয়।

Keras সালে অপ্টিমাইজার অবজেক্টের জন্য কনস্ট্রাকটর অধীনে আছে keras.optimizers.* নামস্থান। TensorFlow.js স্তরসমূহ সালে Optimizers জন্য কারখানা পদ্ধতি অধীনে আছে tf.train.* নামস্থান। উদাহরণ স্বরূপ:

# Python:
my_sgd = keras.optimizers.sgd(lr=0.2)
// JavaScript:
const mySGD = tf.train.sgd({lr: 0.2});

loadLayersModel() একটি URL থেকে লোড হয়, একটি HDF5 ফাইল নয়

Keras সালে, মডেল সাধারণত সংরক্ষিত একটি HDF5 (.h5) ফাইল, যা পরে ব্যবহার লোড করা যাবে যেমন keras.models.load_model() পদ্ধতি। পদ্ধতিটি .h5 ফাইলে একটি পথ নেয়। সহযোগীর load_model() TensorFlow.js হয় tf.loadLayersModel() । যেহেতু HDF5 একটি ব্রাউজার বান্ধব ফাইল ফরম্যাট নয়, tf.loadLayersModel() একটি TensorFlow.js-নির্দিষ্ট বিন্যাস লাগে। tf.loadLayersModel() তার ইনপুট আর্গুমেন্ট হিসাবে একটি model.json ফাইল লাগে। tensorflowjs পিপ প্যাকেজ ব্যবহার করে মডেল.json কে Keras HDF5 ফাইল থেকে রূপান্তর করা যেতে পারে।

// JavaScript:
const model = await tf.loadLayersModel('https://foo.bar/model.json');

এছাড়াও মনে রাখবেন tf.loadLayersModel() ফেরৎ একটি Promise এর tf.Model

সাধারণভাবে, সংরক্ষণ এবং লোড tf.Model TensorFlow.js মধ্যে s ব্যবহার করা হয় tf.Model.save এবং tf.loadLayersModel পদ্ধতি, যথাক্রমে। আমরা এই API গুলি অনুরূপ হিসাবে তৈরি করা হয়েছে সংরক্ষণ এবং load_model এপিআই Keras করুন। কিন্তু ব্রাউজার এনভায়রনমেন্ট ব্যাকএন্ড এনভায়রনমেন্ট থেকে একেবারেই আলাদা যেখানে কেরাসের মতো স্টেপল ডিপ লার্নিং ফ্রেমওয়ার্ক চলে, বিশেষ করে ডেটা টিকে থাকার এবং ট্রান্সমিট করার জন্য রুটের অ্যারেতে। তাই TensorFlow.js এবং কেরাসে সেভ/লোড API-এর মধ্যে কিছু আকর্ষণীয় পার্থক্য রয়েছে। আমাদের টিউটোরিয়ালটি দেখুন সঞ্চয় এবং tf.Model লোড হচ্ছে আরো বিস্তারিত জানার জন্য।

ব্যবহারের fitDataset() ব্যবহার ট্রেন মডেলের tf.data.Dataset বস্তু

পাইথন TensorFlow এর tf.keras, একটি মডেল একটি ব্যবহার প্রশিক্ষিত করা যেতে পারে ডেটা সেটটি অবজেক্ট। মডেলের fit() পদ্ধতি সরাসরি যেমন একটি বস্তু গ্রহণ করে। একজন TensorFlow.js মডেল ডেটাসেটের জাভাস্ক্রিপ্ট সমতুল্য সঙ্গে প্রশিক্ষিত করা যেতে পারে হিসাবে ভাল বস্তু (দেখুন TensorFlow.js মধ্যে tf.data API- এর ডকুমেন্টেশন )। যাইহোক, পাইথন, অসদৃশ ডেটা সেটটি ভিত্তিক প্রশিক্ষণ ডেডিকেটেড পদ্ধতি, যথা মাধ্যমে সম্পন্ন করা হয় fitDatasetহইয়া () পদ্ধতি শুধুমাত্র টেন্সর-ভিত্তিক মডেল প্রশিক্ষণ জন্য।

স্তর এবং মডেল বস্তুর মেমরি ব্যবস্থাপনা

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