টি এল; ডিআর
এমএনআইএসটি হ্যালো ওয়ার্ল্ডের চিত্র স্বীকৃতি। এটি হৃদয় দিয়ে শেখার পরে, আপনার মনের এই প্রশ্নগুলি সমাধান করা সহজ।
প্রশ্ন সেটিং:
আপনার মূল প্রশ্নটি লিখিত
// how to train, where to pass image and labels ?
আপনার কোড ব্লকের ভিতরে। তাদের জন্য আমি টেনসরফ্লো.জেএস উদাহরণ বিভাগের উদাহরণ থেকে নিখুঁত উত্তর পেয়েছি: এমএনআইএসটি উদাহরণ। আমার নীচের লিঙ্কগুলিতে খাঁটি জাভাস্ক্রিপ্ট এবং নোড.জেএস এর সংস্করণ এবং উইকিপিডিয়া ব্যাখ্যা রয়েছে। আপনার মনের মূল প্রশ্নের উত্তর দেওয়ার জন্য প্রয়োজনীয় স্তরে আমি তাদের নিয়ে যাব এবং আমি কীভাবে আপনার নিজস্ব চিত্র এবং লেবেলগুলিকে এমএনআইএসটি চিত্র সেট এবং এটি ব্যবহারের উদাহরণগুলির সাথে কীভাবে কিছু আছে তার দৃষ্টিভঙ্গি যুক্ত করব।
আগেরটা আগে:
কোড স্নিপেটস।
ছবিগুলি কোথায় পাস করবেন (নোড.জেএস নমুনা)
async function loadImages(filename) {
const buffer = await fetchOnceAndSaveToDiskWithBuffer(filename);
const headerBytes = IMAGE_HEADER_BYTES;
const recordBytes = IMAGE_HEIGHT * IMAGE_WIDTH;
const headerValues = loadHeaderValues(buffer, headerBytes);
assert.equal(headerValues[0], IMAGE_HEADER_MAGIC_NUM);
assert.equal(headerValues[2], IMAGE_HEIGHT);
assert.equal(headerValues[3], IMAGE_WIDTH);
const images = [];
let index = headerBytes;
while (index < buffer.byteLength) {
const array = new Float32Array(recordBytes);
for (let i = 0; i < recordBytes; i++) {
// Normalize the pixel values into the 0-1 interval, from
// the original 0-255 interval.
array[i] = buffer.readUInt8(index++) / 255;
}
images.push(array);
}
assert.equal(images.length, headerValues[1]);
return images;
}
মন্তব্য:
এমএনআইএসটি ডেটাসেট একটি বিশাল চিত্র, যেখানে এক ফাইলে ধাঁধাতে টাইলসের মতো একাধিক চিত্র রয়েছে এবং প্রতিটি আকার এবং পাশাপাশি প্রতিটি x এবং y সমন্বয় সারণীর বাক্সগুলির মতো রয়েছে। প্রতিটি বাক্সে একটি করে নমুনা এবং লেবেল অ্যারেতে সংশ্লিষ্ট x এবং y থাকে the এই উদাহরণ থেকে, এটি বেশ কয়েকটি ফাইলের ফর্ম্যাটে পরিণত করা কোনও বড় বিষয় নয়, যাতে হ্যান্ডল করার জন্য লুপটিকে আসলে একবারে কেবল একটি পিক দেওয়া হয়।
লেবেল:
async function loadLabels(filename) {
const buffer = await fetchOnceAndSaveToDiskWithBuffer(filename);
const headerBytes = LABEL_HEADER_BYTES;
const recordBytes = LABEL_RECORD_BYTE;
const headerValues = loadHeaderValues(buffer, headerBytes);
assert.equal(headerValues[0], LABEL_HEADER_MAGIC_NUM);
const labels = [];
let index = headerBytes;
while (index < buffer.byteLength) {
const array = new Int32Array(recordBytes);
for (let i = 0; i < recordBytes; i++) {
array[i] = buffer.readUInt8(index++);
}
labels.push(array);
}
assert.equal(labels.length, headerValues[1]);
return labels;
}
মন্তব্য:
এখানে, লেবেলগুলি কোনও ফাইলে বাইট ডেটাও রয়েছে। জাভাস্ক্রিপ্ট বিশ্বে এবং আপনার প্রারম্ভিক পয়েন্টে থাকা পদ্ধতির সাথে, লেবেলগুলিও একটি জসন অ্যারে হতে পারে।
মডেল প্রশিক্ষণ:
await data.loadData();
const {images: trainImages, labels: trainLabels} = data.getTrainData();
model.summary();
let epochBeginTime;
let millisPerStep;
const validationSplit = 0.15;
const numTrainExamplesPerEpoch =
trainImages.shape[0] * (1 - validationSplit);
const numTrainBatchesPerEpoch =
Math.ceil(numTrainExamplesPerEpoch / batchSize);
await model.fit(trainImages, trainLabels, {
epochs,
batchSize,
validationSplit
});
মন্তব্য:
কোডটির model.fit
আসল লাইনটি এখানে কাজটি করে: মডেলকে প্রশিক্ষণ দেয়।
পুরো জিনিসটির ফলাফল:
const {images: testImages, labels: testLabels} = data.getTestData();
const evalOutput = model.evaluate(testImages, testLabels);
console.log(
`\nEvaluation result:\n` +
` Loss = ${evalOutput[0].dataSync()[0].toFixed(3)}; `+
`Accuracy = ${evalOutput[1].dataSync()[0].toFixed(3)}`);
বিঃদ্রঃ:
ডেটা সায়েন্সেও, এবারও, এখানে সবচেয়ে স্পর্শকাতর অংশটি হল মডেলটি কতটা ভালভাবে নতুন ডেটা এবং কোনও লেবেল পরীক্ষায় বেঁচে থাকতে পারে তা জানার জন্য, এটি তাদের লেবেল দিতে পারে কি না? এর জন্য মূল্যায়ন অংশটি এখন আমাদের কয়েকটি সংখ্যা মুদ্রণ করে।
ক্ষতি এবং যথার্থতা: [4]
ক্ষতি যত কম হবে ততই ভাল একটি মডেল (যদি না মডেলটি প্রশিক্ষণের ডেটাতে বেশি ফিট করে)। লোকসানটি প্রশিক্ষণ এবং বৈধকরণের জন্য গণনা করা হয় এবং এর ইন্টারপেরেশনটি এই দুটি সেটগুলির জন্য মডেল কতটা ভাল করছে। নির্ভুলতার বিপরীতে, লোকসান শতাংশ নয়। এটি প্রশিক্ষণ বা বৈধতা সেটগুলিতে প্রতিটি উদাহরণের জন্য করা ত্রুটির সংমিশ্রণ।
..
মডেলটির যথার্থতা সাধারণত মডেল পরামিতিগুলি শেখার এবং স্থির হওয়ার পরে নির্ধারিত হয় এবং কোন শেখা হচ্ছে না। তারপরে পরীক্ষার নমুনাগুলি মডেলকে খাওয়ানো হয় এবং মডেল যে ভুল করে (শূন্য-ওয়ান ক্ষতি) তার লক্ষ্যগুলি তুলনা করার পরে রেকর্ড করা হয়।
অধিক তথ্য:
গিথুব পৃষ্ঠাগুলিতে, README.md ফাইলে টিউটোরিয়ালটির একটি লিঙ্ক রয়েছে, যেখানে গিথুব উদাহরণের সমস্তগুলি আরও বিশদভাবে ব্যাখ্যা করা হয়েছে।
[1] https://github.com/tensorflow/tfjs-example/tree/master/mnist
[২] https://github.com/tensorflow/tfjs-example/tree/master/mnist-node
[3] https://en.wikedia.org/wiki/MNIST_database
[4] একটি মেশিন লার্নিং মডেলের "ক্ষতি" এবং "নির্ভুলতা" কীভাবে ব্যাখ্যা করবেন