TL; DR
MNIST เป็นการจดจำรูปภาพ Hello World หลังจากเรียนรู้ด้วยใจแล้วคำถามเหล่านี้ในใจของคุณแก้ง่าย
การตั้งค่าคำถาม:
คำถามหลักที่คุณเขียนคือ
// how to train, where to pass image and labels ?
ภายในบล็อครหัสของคุณ สำหรับผู้ที่ฉันพบคำตอบที่สมบูรณ์จากตัวอย่างของ Tensorflow.js ส่วนตัวอย่าง: ตัวอย่าง MNIST ลิงก์ด้านล่างของฉันมีจาวาสคริปต์และรุ่น node.js ล้วนๆและคำอธิบาย Wikipedia ฉันจะผ่านมันไปในระดับที่จำเป็นเพื่อตอบคำถามหลักในใจของคุณและฉันจะเพิ่มมุมมองว่าภาพและป้ายกำกับของคุณมีส่วนเกี่ยวข้องกับชุดภาพ 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;
}
หมายเหตุ:
ชุดข้อมูล MNIST เป็นภาพขนาดใหญ่ซึ่งในไฟล์เดียวมีหลายภาพเช่นไทล์ในปริศนาแต่ละภาพมีขนาดเท่ากันเคียงข้างกันเช่นกล่องในตาราง x และ y แต่ละกล่องมีหนึ่งตัวอย่างและ x และ y ที่สอดคล้องกันในอาร์เรย์ป้ายกำกับมีป้ายกำกับ จากตัวอย่างนี้ไม่ใช่เรื่องใหญ่ที่จะเปลี่ยนเป็นรูปแบบไฟล์หลาย ๆ รูปดังนั้นจริง ๆ แล้วจะมีเพียงหนึ่งรูปในแต่ละครั้งเท่านั้นที่จะให้ลูป while เพื่อจัดการ
ป้ายกำกับ:
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;
}
หมายเหตุ:
ที่นี่ป้ายกำกับยังเป็นข้อมูลไบต์ในไฟล์ ในโลก Javascript และด้วยวิธีการที่คุณมีในจุดเริ่มต้นป้ายกำกับอาจเป็นอาร์เรย์ 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)}`);
บันทึก:
ในวิทยาศาสตร์ข้อมูลคราวนี้ที่นี่ส่วนที่น่าสนใจที่สุดคือการรู้ว่าแบบจำลองนี้รอดชีวิตจากการทดสอบข้อมูลใหม่และไม่มีป้ายกำกับหรือไม่มันสามารถติดป้ายชื่อได้หรือไม่? เพราะนั่นคือส่วนการประเมินผลที่จะพิมพ์ตัวเลขจำนวนหนึ่งให้กับเรา
การสูญเสียและความแม่นยำ: [4]
การสูญเสียที่ต่ำกว่ารุ่นที่ดีกว่า (ยกเว้นรุ่นที่มีข้อมูลการฝึกอบรมมากเกินไป) การสูญเสียจะคำนวณจากการฝึกอบรมและการตรวจสอบความถูกต้องและการทำงานร่วมกันของแบบจำลองนั้นทำได้ดีเพียงใดในสองชุดนี้ ไม่เหมือนกับความแม่นยำการสูญเสียไม่ใช่เปอร์เซ็นต์ มันเป็นผลรวมของข้อผิดพลาดที่เกิดขึ้นกับแต่ละตัวอย่างในชุดการฝึกอบรมหรือการตรวจสอบ
..
ความถูกต้องของโมเดลมักจะถูกกำหนดหลังจากพารามิเตอร์โมเดลถูกเรียนรู้และคงที่และไม่มีการเรียนรู้เกิดขึ้น จากนั้นตัวอย่างการทดสอบจะถูกป้อนเข้ากับแบบจำลองและจำนวนข้อผิดพลาด (การสูญเสียแบบศูนย์เดียว) ที่แบบจำลองนั้นถูกบันทึกหลังจากเปรียบเทียบกับเป้าหมายจริง
ข้อมูลมากกว่านี้:
ในหน้า GitHub ในไฟล์ README.md มีลิงก์ไปยังบทช่วยสอนซึ่งทั้งหมดในตัวอย่าง GitHub ได้รับการอธิบายโดยละเอียดยิ่งขึ้น
[1] https://github.com/tensorflow/tfjs-examples/tree/master/mnist
[2] https://github.com/tensorflow/tfjs-examples/tree/master/mnist-node
[3] https://en.wikipedia.org/wiki/MNIST_database
[4] วิธีตีความ "การสูญเสีย" และ "ความแม่นยำ" สำหรับโมเดลการเรียนรู้ของเครื่อง