Perusahaan mutakhir beralih ke kecerdasan buatan dan pembelajaran mesin untuk memenuhi tantangan era transformasi bisnis digital baru.
Menurut Gartner:“Delapan puluh tujuh persen pemimpin bisnis senior mengatakan digitalisasi adalah prioritas perusahaan dan 79% ahli strategi perusahaan mengatakan itu menciptakan kembali bisnis mereka—menciptakan aliran pendapatan baru dengan cara baru “.
Sumber :Gartner, Percepat Transformasi Bisnis Digital Anda, 15 Januari 2019
Namun sejauh ini, perubahan digital telah menjadi tantangan. Kompleksitas alat, arsitektur, dan lingkungan menciptakan hambatan untuk menggunakan pembelajaran mesin. Menggunakan manajemen data relasional berbasis SQL untuk menyimpan dan melakukan eksplorasi data gambar mengurangi hambatan dan membuka manfaat pembelajaran mesin.
Entri blog ini menunjukkan penggunaan alat sumber terbuka populer Server MariaDB, pustaka TensorFlow Python, dan pustaka jaringan saraf Keras untuk menyederhanakan kerumitan penerapan pembelajaran mesin. Menggunakan teknologi ini dapat membantu Anda mempercepat waktu ke pasar dengan mengakses, memperbarui, menyisipkan, memanipulasi, dan memodifikasi data secara efisien.
Pembelajaran Mesin pada Basis Data Relasional
Di pusat transformasi bisnis digital yang dimungkinkan oleh pembelajaran mesin adalah teknologi seperti chatbots, mesin rekomendasi, komunikasi yang dipersonalisasi, penargetan iklan cerdas, dan klasifikasi gambar.
Klasifikasi citra memiliki beragam kasus penggunaan—mulai dari penegakan hukum dan militer, hingga mobil ritel dan mobil yang dapat mengemudi sendiri. Saat diimplementasikan dengan pembelajaran mesin, klasifikasi gambar dapat memberikan kecerdasan bisnis waktu nyata. Tujuan klasifikasi citra adalah untuk mengidentifikasi dan menggambarkan, sebagai tingkat keabuan (atau warna) yang unik, fitur-fitur yang terjadi dalam sebuah citra. Alat yang paling umum untuk klasifikasi gambar adalah TensorFlow dan Keras.
TensorFlow adalah library Python untuk komputasi numerik cepat yang dibuat dan dirilis oleh Google. MariaDB Server adalah database relasional open source dengan antarmuka SQL untuk mengakses dan mengelola data. Keras adalah pustaka jaringan saraf sumber terbuka yang ditulis dengan Python.
Dalam posting ini, Anda akan menemukan cara menguji klasifikasi gambar dengan mengaktifkan interoperabilitas antara TensorFlow dan MariaDB Server. Postingan ini menggunakan dataset Fashion MNIST yang berisi 70.000 gambar skala abu-abu dalam 10 kategori. Gambar tersebut menunjukkan pakaian satu per satu dengan resolusi rendah (28 x 28 piksel).
Memuat dan menyiapkan data ke Server MariaDB berada di luar cakupan posting ini. Tabel berikut telah dibuat dan diisi sebelumnya dengan dataset Fashion MNIST.
Gambar | Peran Gambar | Label Gambar |
CREATE TABLE tf_images ( img_label tinyint(4), img_vector blob, img_idx int(10) unsigned NOT NULL, img_blob blob, img_use tinyint(4) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 | CREATE TABLE img_use ( use_id tinyint(4) NOT NULL AUTO_INCREMENT, use_name varchar(10) NOT NULL, use_desc varchar(100) NOT NULL, PRIMARY KEY (use_id) ) ENGINE=InnoDB AUTO_INCREMENT=3 CHARSET DEFAULT=utf8mb4 | CREATE TABLE categories ( class_idx tinyint(4) NOT NULL, class_name char(20) DEFAULT NULL, PRIMARY KEY (class_idx) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
Eksplorasi Data
Pustaka berikut digunakan untuk melakukan eksplorasi data dasar dengan Server MariaDB:
- io module menyediakan fasilitas utama Python untuk menangani berbagai jenis I/O.
- Matplotlib adalah pustaka plot 2D Python untuk menghasilkan berbagai grafik di seluruh platform.
- Panda menawarkan struktur dan operasi data untuk memanipulasi tabel numerik dan deret waktu.
- pymysql paket berisi pustaka klien Python murni untuk mengakses Server MariaDB.
Mari kita mulai dengan menghubungkan ke server database melalui Python:
import io import matplotlib.pyplot as plt import matplotlib.image as mpimg import pandas as pd import pymysql as MariaDB %matplotlib inline conn = MariaDB.connect( host = '127.0.0.1' , port = 3306 , user = 'mdb' , passwd = 'letmein' , db = 'ml' , charset = 'utf8') cur = conn.cursor()
Setelah terhubung ke server MariaDB, gambar dalam database dapat dengan mudah diakses dan dikelola. Semua gambar yang digunakan untuk pelatihan dan pengujian model disimpan dalam satu tabel (tf_images). Bagaimana gambar akan digunakan didefinisikan dalam tabel penggunaan gambar (img_use). Dalam hal ini, tabel hanya memiliki dua tupel, pelatihan dan pengujian:
sql="SELECT use_name AS 'Image Role' , use_desc AS 'Description' FROM img_use" display( pd.read_sql(sql,conn) )
Peran Gambar | Deskripsi |
Pelatihan | Gambar digunakan untuk melatih model |
Pengujian | Gambar digunakan untuk menguji model |
Memetakan atribut target ke objek gambar dalam kumpulan data disebut pelabelan. Definisi label bervariasi dari aplikasi ke aplikasi, dan hampir tidak ada definisi universal tentang apa label "benar" untuk sebuah gambar. Menggunakan database relasional menyederhanakan proses pelabelan dan menyediakan cara untuk beralih dari label butiran kasar ke butiran halus.
Dalam contoh ini, menggunakan tabel “kategori”, sebuah gambar hanya memiliki satu label (kasar) seperti yang ditunjukkan di bawah ini:
sql="SELECT class_name AS 'Class Name' FROM categories" display( pd.read_sql(sql,conn) )
Nama Kelas | |
0 | T-shirt/atas |
1 | Celana Panjang |
2 | Penarikan |
3 | Pakaian |
4 | Mantel |
5 | Sandal |
6 | Kemeja |
7 | sepatu kets |
8 | Tas |
9 | Boot pergelangan kaki |
Gambar tabel berisi semua gambar yang akan digunakan untuk pelatihan dan pengujian. Setiap gambar memiliki pengenal unik, label, dan apakah itu digunakan untuk melatih atau menguji model. Gambar disimpan dalam format PNG aslinya dan sebagai tensor floating point yang telah diproses sebelumnya. Inner join sederhana pada tabel ini dapat dijalankan untuk menampilkan representasi gambar (format vektor atau png), labelnya, dan tujuan penggunaan.
sql="SELECT cn.class_name AS 'Class Name' , iu.use_name AS 'Image Use' , img_vector AS 'Vector Representation' , img_blob AS 'Image PNG' FROM tf_images AS ti INNER JOIN categories AS cn ON ti.img_label = cn.class_idx INNER JOIN img_use AS iu ON ti.img_use = iu.use_id LIMIT 5" display( pd.read_sql(sql,conn) )
Nama Kelas | Penggunaan Gambar | Representasi Vektor | Gambar PNG |
Boot pergelangan kaki | Pelatihan | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
Kemeja/atas | Pelatihan | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b”\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
Kemeja/atas | Pelatihan | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
Pakaian | Pelatihan | b”\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
Kemeja/atas | Pelatihan | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
Menggunakan pernyataan SQL membuat proses eksplorasi data menjadi mudah. Misalnya, pernyataan SQL di bawah ini menunjukkan distribusi gambar menurut label gambar.
sql="SELECT class_name AS 'Image Label' \ , COUNT(CASE WHEN img_use = 1 THEN img_label END) AS 'Training Images'\ , COUNT(CASE WHEN img_use = 2 THEN img_label END) AS 'Testing Images'\ FROM tf_images INNER JOIN categories ON class_idx = img_label \ GROUP BY class_name" df = pd.read_sql(sql,conn) display (df) ax = df.plot.bar(rot=0)
Label Gambar | Gambar Pelatihan | Menguji Gambar | |
0 | Boot pergelangan kaki | 6000 | 1000 |
1 | Tas | 6000 | 1000 |
2 | Mantel | 6000 | 1000 |
3 | Pakaian | 6000 | 1000 |
4 | Penarikan | 6000 | 1000 |
5 | Sandal | 6000 | 1000 |
6 | Kemeja | 6000 | 1000 |
7 | sepatu kets | 6000 | 1000 |
8 | T-shirt/atas | 6000 | 1000 |
9 | Celana Panjang | 6000 | 1000 |
Ada 6.000 gambar untuk setiap label di set pelatihan dan 1.000 gambar untuk setiap label di set pengujian. Ada 60.000 total gambar di set pelatihan dan 10.000 total gambar di set pengujian.
Pakaian individu disimpan sebagai gambar beresolusi rendah. Karena database dapat menyimpan gambar tersebut secara efisien sebagai Binary Large OBjects (BLOB), sangat mudah untuk mengambil gambar menggunakan SQL, seperti yang ditunjukkan di bawah ini:
sql="SELECT img_blob \ FROM tf_images INNER JOIN img_use ON use_id = img_use \ WHERE use_name = 'Testing' and img_idx = 0" cur.execute(sql) data = cur.fetchone() file_like=io.BytesIO(data[0]) img = mpimg.imread(file_like) plt.imshow(img)
atas:gambar dari kumpulan data fashion_mnist
Bagian pertama dari seri blog ini telah menunjukkan bagaimana database relasional dapat digunakan untuk menyimpan dan melakukan eksplorasi data gambar menggunakan pernyataan SQL sederhana. Bagian 2 akan menunjukkan cara memformat data ke dalam struktur data yang dibutuhkan oleh TensorFlow, lalu cara melatih model, melakukan prediksi (yaitu, mengidentifikasi gambar) dan menyimpan prediksi tersebut kembali ke database untuk analisis atau penggunaan lebih lanjut.
Lisensi MIT
Kumpulan data Fashion MNIST (fashion_mnist) yang dimanfaatkan oleh blog ini dilisensikan di bawah Lisensi MIT.
Lisensi MIT (MIT) Hak Cipta © 2017 Zalando SE, https://tech.zalando.com
Dengan ini, izin diberikan, gratis, kepada siapa pun yang memperoleh salinan perangkat lunak ini dan file dokumentasi terkait ("Perangkat Lunak"), untuk menangani Perangkat Lunak tanpa batasan, termasuk namun tidak terbatas pada hak untuk menggunakan, menyalin, memodifikasi, menggabungkan, menerbitkan, mendistribusikan, mensublisensikan, dan/atau menjual salinan Perangkat Lunak, dan untuk mengizinkan orang yang diberikan Perangkat Lunak untuk melakukannya, dengan tunduk pada ketentuan berikut:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus disertakan dalam semua salinan atau sebagian besar Perangkat Lunak.
PERANGKAT LUNAK INI DISEDIAKAN “SEBAGAIMANA ADANYA”, TANPA JAMINAN DALAM BENTUK APA PUN, TERSURAT MAUPUN TERSIRAT, TERMASUK NAMUN TIDAK TERBATAS PADA JAMINAN DIPERDAGANGKAN, KESESUAIAN UNTUK TUJUAN TERTENTU DAN TANPA PELANGGARAN. DALAM KEADAAN APA PUN PENULIS ATAU PEMEGANG HAK CIPTA TIDAK BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN ATAU TANGGUNG JAWAB LAINNYA, BAIK DALAM TINDAKAN KONTRAK, KERUSAKAN ATAU LAINNYA, TIMBUL DARI, DARI ATAU SEHUBUNGAN DENGAN PERANGKAT LUNAK ATAU DALAM DEALING LAINNYA PERANGKAT LUNAK.
Referensi
Ubah gambar sendiri menjadi gambar MNIST
matplotlib:Tutorial gambar
5 cara AI mengubah pengalaman pelanggan
Digitalisasi menciptakan kembali bisnis
Apa itu klasifikasi gambar?
Pengantar Python TensorFlow Pustaka Pembelajaran Mendalam