Saya ingin membuat penggolong gambar, tapi saya tidak tahu python. Tensorflow.js bekerja dengan javascript, yang saya kenal. Bisakah model dilatih dengan itu dan apa langkah-langkahnya? Terus terang saya tidak tahu harus mulai dari mana.
Satu-satunya hal yang saya tahu adalah bagaimana memuat "mobilenet", yang tampaknya adalah satu set model pra-terlatih, dan mengklasifikasikan gambar dengan itu:
const tf = require('@tensorflow/tfjs'),
mobilenet = require('@tensorflow-models/mobilenet'),
tfnode = require('@tensorflow/tfjs-node'),
fs = require('fs-extra');
const imageBuffer = await fs.readFile(......),
tfimage = tfnode.node.decodeImage(imageBuffer),
mobilenetModel = await mobilenet.load();
const results = await mobilenetModel.classify(tfimage);
yang berfungsi, tetapi tidak ada gunanya bagi saya karena saya ingin melatih model saya sendiri menggunakan gambar saya dengan label yang saya buat.
=======================
Katakanlah saya punya banyak gambar dan label. Bagaimana cara menggunakannya untuk melatih model?
const myData = JSON.parse(await fs.readFile('files.json'));
for(const data of myData){
const image = await fs.readFile(data.imagePath),
labels = data.labels;
// how to train, where to pass image and labels ?
}
fit
metode, atau dalam dataset dilewatkan kefitDataset
, seperti yang ditunjukkan dalam contoh.Jawaban:
Pertama-tama, gambar perlu dikonversi menjadi tensor. Pendekatan pertama adalah membuat tensor yang berisi semua fitur (masing-masing tensor berisi semua label). Seharusnya cara ini hanya berlaku jika dataset berisi beberapa gambar.
Label akan berupa array yang menunjukkan jenis setiap gambar
Sekarang kita perlu membuat enkode label panas
Begitu ada tensor, seseorang perlu membuat model untuk pelatihan. Ini adalah model sederhana.
Maka modelnya bisa dilatih
Jika dataset berisi banyak gambar, seseorang harus membuat tfDataset sebagai gantinya. Jawaban ini membahas mengapa.
Dan gunakan
model.fitDataset(ds)
untuk melatih modelDi atas adalah untuk pelatihan dalam nodejs. Untuk melakukan pemrosesan seperti itu di browser,
genFeatureTensor
dapat ditulis sebagai berikut:Satu kata peringatan adalah bahwa melakukan pemrosesan yang berat dapat memblokir utas di browser. Di sinilah pekerja web ikut bermain.
sumber
tf.image.resizeBilinear
Pertimbangkan contohnya https://codelabs.developers.google.com/codelabs/tfjs-training-classfication/#0
Apa yang mereka lakukan adalah:
lalu latih
Bangunan dataset adalah sebagai berikut:
Gambar besar dibagi menjadi n potongan vertikal. (n sedang chunkSize)
Pertimbangkan sepotong Ukuran 2.
Diberi matriks piksel gambar 1:
Mengingat matriks pixel dari gambar 2 adalah
Array yang dihasilkan adalah
1 2 3 4 5 6 7 8 9 1 2 3
(rangkaian 1D entah bagaimana)Jadi pada dasarnya di akhir pemrosesan, Anda memiliki buffer besar yang mewakili
[...Buffer(image1), ...Buffer(image2), ...Buffer(image3)]
Pemformatan semacam itu banyak dilakukan untuk masalah klasifikasi. Alih-alih mengklasifikasikan dengan angka, mereka mengambil array boolean. Untuk memprediksi 7 dari 10 kelas kami akan mempertimbangkan
[0,0,0,0,0,0,0,1,0,0] // 1 in 7e position, array 0-indexed
Apa yang dapat Anda lakukan untuk memulai
Di bawah, saya subkelas
MNistData::load
(sisanya dapat dibiarkan apa adanya (kecuali dalam script.js di mana Anda harus membuat instance kelas Anda sendiri sebagai gantinya)Saya masih menghasilkan 28x28 gambar, menulis angka di atasnya, dan mendapatkan akurasi yang sempurna karena saya tidak menyertakan noise atau pelabelan sukarela yang salah.
sumber
Saya menemukan tutorial [1] cara menggunakan model yang ada untuk melatih kelas baru. Bagian kode utama di sini:
kepala index.html:
tubuh index.html:
index.js:
Gagasan utama adalah menggunakan jaringan yang ada untuk membuat prediksi dan kemudian mengganti label yang ditemukan dengan yang Anda miliki.
Kode lengkap ada di tutorial. Satu lagi menjanjikan, lebih maju dalam [2]. Ini membutuhkan pemrosesan awal yang ketat, jadi saya tinggalkan hanya di sini, maksud saya ini jauh lebih maju.
Sumber:
[1] https://codelabs.developers.google.com/codelabs/tensorflowjs-teachablemachine-codelab/index.html#6
[2] https://towardsdatascience.com/training-custom-image-classification-model-on-the-browser-with-tensorflow-js-and-angular-f1796ed24934
sumber
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
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)
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:
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:
Catatan:
Inilah
model.fit
baris kode aktual yang melakukan hal itu: melatih model.Hasil dari semuanya:
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]
..
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
sumber