Draws samples from a categorical distribution. Show View aliasesCompat aliases for migration See Migration guide for more details.
tf.random.categorical( logits, num_samples, dtype=None, seed=None, name=None ) Example:# samples has shape [1, 5], where each value is either 0 or 1 with equal # probability. samples = tf.random.categorical(tf.math.log([[0.5, 0.5]]), 5)Args logits 2-D Tensor with shape [batch_size, num_classes] . Each slice [i, :] represents the unnormalized log-probabilities for all classes.num_samples 0-D. Number of independent samples to draw for each row slice.dtype integer type to use for the output. Defaults to int64.seed A Python integer. Used to create a random seed for the distribution. See tf.compat.v1.set_random_seed for behavior.# samples has shape [1, 5], where each value is either 0 or 1 with equal # probability. samples = tf.random.categorical(tf.math.log([[0.5, 0.5]]), 5)0Optional name for the operation.ReturnsThe drawn samples of shape # samples has shape [1, 5], where each value is either 0 or 1 with equal # probability. samples = tf.random.categorical(tf.math.log([[0.5, 0.5]]), 5)1. Assalamualaikum, Setelah lama tidak menulis artikel dan tutorial, akhirnya diriku ke-pikiran juga buat nulis ini karena ini cukup penting sih tapi kadang suka lupa, jadi akhirnya cari-cari lagi materi tentang ini di internet, jadi daripada nanti diriku mencari-cari lagi dan bingung sendiri mungkin sebaiknya bikin tutorial nya saja sekalian. Biar tidak bingung.dan di sini tensorflow yang digunakan adalah tensorflow 2.1 yang terbaru. sudah tidak menggunakan keras lagi. Kemudian mari kita masuk ke outline nya dulu. Dalam tulisan ini akan mencakup beberapa hal:
Ya klasifikasi sebuah citra, berdasarkan klasifikasi yang kita buat. dan Ya, klasifikasi gambar merupakan salah satu metode machine learning / artificial intelligence yang dapat digunakan untuk mendeteksi sebuah gambar dengan cepat. intinya sih misalnya kita punya kebun bunga, terus kita panen semua tuh bunganya. Nah kita agak kesulitan buat mengelompokkan bunganya karena ada bunga yang hampir mirip dan bunganya itu banyak banget. jadi daripada kita kelompokin bunganya satu satu, mungkin sebaiknya kita membuat mesin untuk mengelompokan bunga tersebut sehingga kita dapat lebih mudah untuk pengelompokannya dan menjadi lebih efisien. Ya gitu aja sih gambarannya. Jika membutuhkan pendalaman lebih lanjut mengenai image classification kalian bisa mengunjungi Youtube/ Cari di Google. Pasti sudah banyak sih referensi nya. Dan tujuan dari menulis ini adalah karena tensorflow sudah mengeluarkan versi 2.x maka sudah saatnya upgrade dari yang sebelumnya menggunakan ├── dataset 8menjadi ├── dataset 9dan dalam prosesnya modul ├── dataset 9 ini lebih efisien dibandingkan dengan sebelumnya.Dan mungkin setelah ini saya akan pindah ke pytorch wkwkwk ~ Oke mari kita mulai Yang perlu disiapkan!Beberapa kebutuhan untuk membuat image classifier merupakan kebutuhan yang tidak murah, karena img classifier membutuhkan performa komputasi yang cukup tinggi agar dapat berjalan dengan lancar.Namun Kita dapat menggunakan Google Code Lab (Colab) untuk melakukannya. Hal yang perlu disiapkan:
Library yang digunakan
Mempersiapkan Data-set Ya kita siapkan dulu data-setnya, Di sini kita gunakan contoh gambar/ image bunga dari kaggle saja biar enak untuk datanya bisa klik di sini . Pertama tama kita extract terlebih dahulu datanya, lalu treedir nya akan seperti ini. saat data pertama kali di extract. └── flowers Dalam proses yang pertama ini, kita ingin membagi datanya menjadi 3 bagian. yaitu train, test, dan validation. dengan proporsi (80,10,10). Kemudian, pada proses ini kita ingin membagi datanya menjadi seperti ini. ├── dataset Berikut untuk kode nya. Mempersiapkan variabel global untuk training Dibagian ini kita akan menentukan seberapa banyak jumlah epoch untuk proses training, input dimension, batch_size. dll # Parameter input untuk networkMempersiapkan dataset pipeline dan augmentation Untuk proses pembuatan dataset Dataset pipeline merupakan perintah untuk melakukan ekstraksi data yang berupa images/citra digital, yang berasal dari sebuah folder menjadi sebuah array yang dapat dibaca oleh tensorflow, fungsi yang digunakan adalah # Parameter input untuk network1 Fungsi tersebut merupakan Image data generator sehingga kita mengenerate data image dari sebuah file / folder yang telah kita buat sebelumnya. pada bagian ini kita dapat menentukan generator / augmentasi seperti apa yang dapat dilakukan. Untuk bacaan lebih lanjut dapat mengunjungi tautan referensi berikut: Pertama tama kita mendefinisikan terlebih dahulu bagaimana transformasi data yang akan digunakan. train_datagen = ImageDataGenerator(rescale=1. / 255, Pada perintah diatas kita melakukan
Sehingga contohnya akan seperti ini Src: https://towardsdatascience.com/machinex-image-data-augmentation-using-keras-b459ef87cd22Membuat flow datanyaSetelah mendefinisikan generatornya, selanjutnya kita mendefinisikan darimana sumber datanya berasal. Misalkan pada project kali ini kita menggunakan data yang berasal dari folder (dictionary) sehingga code yang digunakan adalah sebagai berikut: pada code diatas, kita menggunakan flow from dir dimana fungsi tersebut mengarahkan kita kepada folder set yang telah kita buat sebelumnya. di mana :
Transformasi data generator menjadi tf.dataPada proses ini kita akan melakukan transformasi variabel train_generator dan lainnya menjadi tf data, kenapa menggunakan # Parameter input untuk network3 karena # Parameter input untuk network3 merupakan tipe variabel generator yang cocok dengan ├── dataset 9 sehingga sangat optimal dalam pembacaan data yang dilakukan dalam proses training dibandingkan hanya menggunakan generator dari keras itu sendiri. Untuk lebih lanjut dapat dibaca di sini. Lalu berikut penerapannya.def tf_data_generator(generator, input_shape):Membuat Struktur Convolutional Neural Network Setelah membuat dataset generator, selanjutnya kita melakukan membuat jaringan nerual network. Namun karena kita terlalu malas maka kita dapat menggunakan network yang sudah ada. pada project ini kita menggunakan Mobilenet V2 untuk paper terkait dapat dibaca di sini. Kemudian untuk pilihan network-network yang sudah ada bisa dilihat di sini. Pertama-tama kita mendefinisikan terlebih dahulu base-model kita / yang akan di gunakan pada project ini. from tensorflow.keras.applications import MobileNetV2# get base models Di mana :
Setelah berhasil maka base-model sudah terbentuk dan selanjutnya adalah menambahkan top layer yang akan kita definisikan karena kita set false pada base model di atas. from tensorflow.keras import layers,Sequential Kita telah menambahkan top-layer kedalam network dan variabel yang digunakan adalah model. Kemudian kita dapat melihat keseluruhan network dengan menggunakan # Parameter input untuk network7 Bisa kita lihat bahwa top layer yang kita definisikan sudah masuk kedalam model. Dan model bisa kita compile sehingga dapat digunakan untuk training. Compile model# Compile the model Pada proses ini kita meyusun model menjadi siap dilakukan proses training. Dimana variabel yang digunakan adalah-
Visualisasi ModelKita bisa memvisualisasikan model menggunakan perintah berikut. model_viz = tf.keras.utils.plot_model(model, Dan hasilnya akan seperti ini. Dan itu hasilnya sangat panjang. atau kalian dapat membuka filenya dengan nama file # Parameter input untuk network9 Proses Training Model Setelah membuat model selanjutnya adalah melakukan proses training, dimana proses training ini merupakan proses dimana machine learning bekerja sehingga algoritma yang sudah kita definisikan dapat mengingat pola dari masing masing kelas pada data yang kita train. Untuk perintahnya adalah menggunakan perintah berikut. EPOCH = 5 Dimana:
Untuk keterangan lebih lanjut dapat dibaca disini. Kemudian untuk contoh proses training nya akan seperti ini. Mari kita tunggu sampai proses training selesai. Dari hasil diatas bisa kita baca bahwa akurasi pada data training adalah 0.70 dan nilai lossnya adalah 0.91, Kemudian untuk data validasinya adalah 0.544 dan nilai lossnya adalah 2.388. Namun ini baru iterasi pertama. Sehingga kita bisa menunggu untuk iterasi berikutnya / hingga model selesai dilatih dengan 5 iterasi. ├── dataset 0Dan hasil training nya adalah seperti itu, Hasil tersebut rupanya tidak bagus ternyata untuk model ini. Di mana Dimana nilai loss pada data validasi adalah cenderung tidak stabil. Sehingga bisa dibilang model ini overfit terhadap data training namun belum tentu. Perlu percobaan lebih lanjut apakah model ini overfit atau tidak. Begitu juga dengan nilai akurasi nya. Di mana nilai akurasi untuk data validasi cenderung tidak stabil sehingga model ini kurang baik. Maka diperlukan penelitian lebih lanjut untuk mencari model yang terbaik. Bisa dilakukan training ulang atau mengganti dengan model / network yang baru. Simpan Model yang sudah di trainingSetelah melakukan proses training, selanjutnya adalah melakukan save pada model. ├── dataset 1Pada bagian train_datagen = ImageDataGenerator(rescale=1. / 255,1 ini merupakan agar si tensorflow tidak menyimpan keadaan optimizer pada saat terakhir disimpan, Ini agar dapat menghemat media penyimpanan dan mempermudah dalam proses deployment. Dan contoh perbandingannya adalah sebagai berikut: Model pertama merupakan train_datagen = ImageDataGenerator(rescale=1. / 255,2yang tanpa optimizer dan train_datagen = ImageDataGenerator(rescale=1. / 255,3 adalah model dengan optimizer didalamnya. Sehingga perbedaannya adalah 3 kali lipat dari model tanpa optimizer. ini sangat menghemat penyimpanan.Evaluasi model menggunakan data testing Pada bagian ini kita melakukan testing menggunakan data test. Di mana, data test ini tidak diikut sertakan ke dalam proses training. Berikut adalah perintahnya: ├── dataset 2dan hasilnya adalah sebagai berikut : ├── dataset 3Dari hasil tersebut dilihat bahwa model cukup stabil di kedua data sehingga dapat disarankan untuk melakukan training lagi atau dapat mencari algoritma / model yang lain seperti inception_v2 ataupun inception_resnet. Untuk kode lengkapnya, bisa dilihat di notebook ini pada notebook ini saya contohkan juga menggunakan efficient-net dimana efficient net merupakan model yang terbaik pada #SOTA-1 Image-net. Membuat Fungsi Prediksi Setelah kita membuat model dan melakukan training model langkah selanjutnya adalah membuat fungsi prediksi. Sehingga jika kita memiliki data baru diluar data train test validasi. maka kita dapat dengan mudah memprediksinya. Langkah pertama yang dilakukan adalah melakukan definisi variabel global. ├── dataset 4Dimana kita input kan sesuai dengan nilai yang sama seperti pada saat proses training. untuk label nya bisa kita urutkan sesuai dengan abjad atau pada saat proses training. label nya disimpan seperti gambar berikut : Lalu selanjutnya adalah mendefinisikan fungsi pre-process, dimana fungsi ini adalah mengubah sebuah citra menjadi sebuah array yang cocok untuk masuk kedalam model yang sudah kita latih. ├── dataset 5fungsi diatas merupakan fungsi mengubah image menjadi array dimana image diubah menjadi frormat RGB kemudian dilakukan resize dengan metode interpolasi Nearest-neighbor default dari library tersebut. Setelah itu melakukan reshape array yang awalnya adalah 3 dimensi, menjadi 4 dimensi, atau bisa disebut tensor. Kemudian selanjutnya adalah melakukan load model yang sudah di training. Load model tersebut dapat lakukan dengan menggunakan perintah berikut. ├── dataset 6Setelah model yang sudah dilatih telah berhasil dimuat. maka selanjutnya adalah melakukan prediksi terhadap sebuah gambar. Misalnya kita memiliki contoh gambar berikut : Lalu kemudian perintahnya adalah sebagai berikut: ├── dataset 7Di mana, pada perintah di atas kita membuka image / citra . Kemudian, kita melakukan preprocess imagenya menjadi sebuah train_datagen = ImageDataGenerator(rescale=1. / 255,4 yang kemudian direshape menjadi sebuah tensor. Setelah itu memprediksi termasuk bunga apakah gambar tersebut. Hasilnya adalah seperti gambar diatas. Variabel train_datagen = ImageDataGenerator(rescale=1. / 255,5 merupakan nilai dari hasil prediksi yang menghasilkan banyak nilai. Di mana nilai-nilai tersebut adalah nilai dari masing-masing kategori. Kemudian kita mencari nilai ter-besarnya, yaitu pada kolom ke 4 yang merupakan kelas tulip berdasarkan label yang sudah di definisikan di atas. dan dengan nilai probabilitas ~0.91-. |