TL; DR
MNIST adalah pengenalan gambar Hello World. Setelah mempelajarinya dengan hati, pertanyaan-pertanyaan ini dalam pikiran Anda mudah untuk dipecahkan.
Pengaturan pertanyaan:
Pertanyaan utama Anda yang tertulis adalah
// how to train, where to pass image and labels ?
di dalam blok kode Anda. Bagi mereka saya menemukan jawaban sempurna dari contoh bagian contoh Tensorflow.js: contoh MNIST. Tautan saya di bawah ini memiliki versi javascript dan node.js murni dan penjelasan Wikipedia. Saya akan membahasnya pada level yang diperlukan untuk menjawab pertanyaan utama dalam pikiran Anda dan saya akan menambahkan juga perspektif bagaimana gambar dan label Anda sendiri ada hubungannya dengan set gambar MNIST dan contoh-contoh yang menggunakannya.
Hal pertama yang pertama:
Cuplikan kode.
tempat untuk mengirimkan gambar (sampel 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;
}
Catatan:
Dataset MNIST adalah gambar besar, di mana dalam satu file ada beberapa gambar seperti ubin dalam puzzle, masing-masing dengan ukuran yang sama, berdampingan, seperti kotak di tabel koordinasi x dan y. Setiap kotak memiliki satu sampel dan sesuai x dan y dalam array label memiliki label. Dari contoh ini, bukan masalah besar untuk mengubahnya ke beberapa format file, sehingga sebenarnya hanya satu gambar pada satu waktu diberikan ke loop sementara untuk menangani.
Label:
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;
}
Catatan:
Di sini, label juga data byte dalam file. Di dunia Javascript, dan dengan pendekatan yang Anda miliki di titik awal, label juga bisa berupa json array.
melatih model:
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
});
Catatan:
Inilah model.fit
baris kode aktual yang melakukan hal itu: melatih model.
Hasil dari semuanya:
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)}`);
catatan:
Dalam Ilmu Data, juga kali ini di sini, bagian yang paling menarik adalah untuk mengetahui seberapa baik model bertahan dari pengujian data baru dan tidak ada label, dapatkah mereka melabelinya atau tidak? Untuk itu adalah bagian evaluasi yang sekarang mencetak beberapa angka.
Kehilangan dan keakuratan: [4]
Semakin rendah kerugiannya, semakin baik suatu model (kecuali jika model tersebut terlalu cocok dengan data pelatihan). Kerugian dihitung pada pelatihan dan validasi dan interperasinya adalah seberapa baik model melakukan untuk dua set ini. Tidak seperti akurasi, kerugian bukanlah persentase. Ini adalah penjumlahan dari kesalahan yang dibuat untuk setiap contoh dalam set pelatihan atau validasi.
..
Keakuratan model biasanya ditentukan setelah parameter model dipelajari dan diperbaiki dan tidak ada pembelajaran yang terjadi. Kemudian sampel uji dimasukkan ke model dan jumlah kesalahan (nol-satu kerugian) yang dibuat model dicatat, setelah dibandingkan dengan target yang sebenarnya.
Informasi lebih lanjut:
Di halaman github, dalam file README.md, ada tautan ke tutorial, di mana semua dalam contoh github dijelaskan secara lebih rinci.
[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] Cara menginterpretasikan "kehilangan" dan "akurasi" untuk model pembelajaran mesin