टी एल; डॉ
MNIST छवि पहचान हैलो वर्ल्ड है। इसे दिल से सीखने के बाद, आपके दिमाग में इन सवालों को हल करना आसान है।
प्रश्न सेटिंग:
आपका मुख्य प्रश्न लिखित है
// how to train, where to pass image and labels ?
आपके कोड ब्लॉक के अंदर। उन लोगों के लिए मुझे Tensorflow.js उदाहरण अनुभाग के उदाहरणों से परिपूर्ण उत्तर मिला: MNIST उदाहरण। मेरे नीचे दिए गए लिंक में शुद्ध जावास्क्रिप्ट और नोड हैं। इसके और विकिपीडिया स्पष्टीकरण के संस्करण। मैं आपके दिमाग में मुख्य प्रश्न का उत्तर देने के लिए आवश्यक स्तर पर उनके माध्यम से जाऊंगा और मैं यह भी जोड़ूंगा कि आपकी खुद की छवियों और लेबल का MNIST छवि सेट और इसका उपयोग करने वाले उदाहरणों के साथ क्या करना है।
पहली चीजें पहले:
कोड के टुकड़े।
छवियों को कहाँ पास करें (Node.js नमूना)
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 का लेबल होता है। इस उदाहरण से, इसे कई फ़ाइलों के प्रारूप में बदलना कोई बड़ी बात नहीं है, ताकि वास्तव में एक समय में केवल एक ही तस्वीर को हैंडल करने के लिए समय दिया जाए।
लेबल:
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;
}
टिप्पणियाँ:
यहां, लेबल एक फ़ाइल में बाइट डेटा भी हैं। जावास्क्रिप्ट दुनिया में, और आपके शुरुआती बिंदु में आपके पास दृष्टिकोण के साथ, लेबल भी एक json सरणी हो सकते हैं।
मॉडल को प्रशिक्षित करें:
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)}`);
ध्यान दें:
डेटा साइंस में, इस बार भी यहाँ, सबसे अधिक भाग लेने वाला हिस्सा यह जानना है कि मॉडल नए डेटा और किसी भी लेबल के परीक्षण में कितनी अच्छी तरह बचता है, क्या यह उन्हें लेबल कर सकता है या नहीं? इसके लिए मूल्यांकन हिस्सा है जो अब हमें कुछ नंबरों को प्रिंट करता है।
नुकसान और सटीकता: [४]
कम नुकसान, बेहतर मॉडल (जब तक मॉडल ने प्रशिक्षण डेटा से अधिक फिट नहीं किया है)। नुकसान की गणना प्रशिक्षण और सत्यापन पर की जाती है और इसका अंतर यह है कि इन दो सेटों के लिए मॉडल कितना अच्छा काम कर रहा है। सटीकता के विपरीत, नुकसान प्रतिशत नहीं है। यह प्रशिक्षण या सत्यापन सेट में प्रत्येक उदाहरण के लिए की गई त्रुटियों का एक योग है।
..
एक मॉडल की सटीकता आमतौर पर मॉडल के मापदंडों को जानने और तय करने के बाद निर्धारित की जाती है और कोई सीखने की जगह नहीं होती है। फिर परीक्षण के नमूने मॉडल को खिलाए जाते हैं और सही लक्ष्यों की तुलना के बाद मॉडल की गलतियों (शून्य-एक नुकसान) को रिकॉर्ड किया जाता है।
अधिक जानकारी:
Github पृष्ठों में, README.md फ़ाइल में, ट्यूटोरियल का एक लिंक होता है, जहाँ github के सभी उदाहरणों को अधिक विस्तार से समझाया जाता है।
[१] https://github.com/tensorflow/tfjs-examples/tree/master/mnist
[२] https://github.com/tensorflow/tfjs-examples/tree/master/mnx-ode
[३] https://en.wikipedia.org/wiki/MNIST_database
[४] मशीन लर्निंग मॉडल के लिए "नुकसान" और "सटीकता" की व्याख्या कैसे करें