Geavanceerde bedrijven wenden zich tot kunstmatige intelligentie en machine learning om de uitdagingen van het nieuwe tijdperk van digitale bedrijfstransformatie aan te gaan.
Volgens Gartner:"78 procent van de senior bedrijfsleiders zegt dat digitalisering een bedrijfsprioriteit is en 79% van de bedrijfsstrategen zegt dat het hun bedrijf opnieuw uitvindt en op nieuwe manieren nieuwe inkomstenstromen creëert ".
Bron :Gartner, Versnel uw digitale bedrijfstransformatie, 15 januari 2019
Maar tot nu toe was digitale verandering een uitdaging. De complexiteit van de tools, architectuur en omgeving creëert barrières voor het gebruik van machine learning. Het gebruik van relationeel gegevensbeheer op basis van SQL om gegevens van afbeeldingen op te slaan en uit te voeren, vermindert de barrières en ontgrendelt de voordelen van machine learning.
Deze blogpost demonstreert het gebruik van populaire open source-tools MariaDB Server, TensorFlow Python-bibliotheek en Keras neurale netwerkbibliotheek om de complexiteit van het implementeren van machine learning te vereenvoudigen. Door deze technologieën te gebruiken, kunt u uw time-to-market versnellen door gegevens efficiënt te openen, bij te werken, in te voegen, te manipuleren en te wijzigen.
Machineleren op relationele databases
De kern van de digitale bedrijfstransformatie die mogelijk wordt gemaakt door machine learning, zijn technologieën zoals chatbots, aanbevelingsengines, gepersonaliseerde communicatie, intelligente advertentietargeting en beeldclassificatie.
Beeldclassificatie heeft een breed scala aan gebruiksscenario's, van wetshandhavers en het leger tot auto's in de detailhandel en zelfrijdende auto's. Indien geïmplementeerd met machine learning, kan beeldclassificatie realtime business intelligence bieden. Het doel van beeldclassificatie is het identificeren en weergeven, als een uniek grijsniveau (of kleur), de kenmerken die in een beeld voorkomen. De meest gebruikte hulpmiddelen voor beeldclassificatie zijn TensorFlow en Keras.
TensorFlow is een Python-bibliotheek voor snel numeriek computergebruik, gemaakt en vrijgegeven door Google. MariaDB Server is een open source relationele database met een SQL-interface voor toegang tot en beheer van gegevens. Keras is een open-source neurale netwerkbibliotheek geschreven in Python.
In dit bericht ontdekt u hoe u beeldclassificatie kunt testen door interoperabiliteit tussen TensorFlow en MariaDB Server mogelijk te maken. Dit bericht maakt gebruik van de Fashion MNIST-dataset die 70.000 grijswaardenafbeeldingen in 10 categorieën bevat. De afbeeldingen tonen individuele kledingstukken in lage resolutie (28 bij 28 pixels).
Het laden en voorbereiden van de gegevens in MariaDB Server valt buiten het bestek van dit bericht. De volgende tabellen zijn vooraf gemaakt en gevuld met de Fashion MNIST-dataset.
Afbeeldingen | Afbeeldingsrol | Afbeeldingslabel |
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) ) MOTOR=InnoDB STANDAARD 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 STANDAARD CHARSET=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 |
Gegevensverkenning
De volgende bibliotheken worden gebruikt om basisgegevensverkenning met MariaDB Server uit te voeren:
- De io module biedt de belangrijkste faciliteiten van Python voor het omgaan met verschillende soorten I/O.
- Matplotlib is een Python 2D-plotbibliotheek om een verscheidenheid aan grafieken op verschillende platforms te produceren.
- Panda's biedt datastructuren en bewerkingen voor het manipuleren van numerieke tabellen en tijdreeksen.
- De pymysql pakket bevat een pure Python-clientbibliotheek voor toegang tot MariaDB Server.
Laten we beginnen door verbinding te maken met de databaseserver via 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()
Eenmaal verbonden met de MariaDB-server, kunnen de afbeeldingen in de database eenvoudig worden geopend en beheerd. Alle afbeeldingen die worden gebruikt voor het trainen en testen van het model worden opgeslagen in een enkele tabel (tf_images). Hoe de afbeelding zal worden gebruikt, wordt gedefinieerd in de tabel met afbeeldingsgebruik (img_use). In dit geval heeft de tabel slechts twee tuples, training en testen:
sql="SELECT use_name AS 'Image Role' , use_desc AS 'Description' FROM img_use" display( pd.read_sql(sql,conn) )
Afbeeldingsrol | Beschrijving |
Training | De afbeelding wordt gebruikt om het model te trainen |
Testen | De afbeelding wordt gebruikt om het model te testen |
Het toewijzen van doelattributen aan afbeeldingsobjecten in een dataset wordt labelen genoemd. De labeldefinitie varieert van toepassing tot toepassing en er is nauwelijks een universele definitie van wat een "juist" label is voor een afbeelding. Het gebruik van een relationele database vereenvoudigt het etiketteringsproces en biedt een manier om van grof naar fijnkorrelig etiketten te gaan.
In dit voorbeeld, met behulp van de tabel 'categorieën', heeft een afbeelding slechts één label (grof) zoals hieronder weergegeven:
sql="SELECT class_name AS 'Class Name' FROM categories" display( pd.read_sql(sql,conn) )
Klassenaam | |
0 | T-shirt/top |
1 | Broek |
2 | Trui |
3 | Jurk |
4 | Jas |
5 | Sandaal |
6 | Overhemd |
7 | Sneaker |
8 | Tas |
9 | Enkellaars |
De afbeeldingen tabel bevat alle afbeeldingen die moeten worden gebruikt voor training en testen. Elke afbeelding heeft een unieke id, een label en of deze wordt gebruikt voor het trainen of testen van het model. De afbeeldingen worden opgeslagen in hun originele PNG-formaat en als voorbewerkte drijvende-komma-tensoren. Een eenvoudige inner join op deze tabel kan worden uitgevoerd om de afbeeldingsrepresentaties (vector- of png-indeling), het label en het beoogde gebruik weer te geven.
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) )
Klassenaam | Afbeelding gebruiken | Vectorweergave | Afbeelding PNG |
Enkellaars | Training | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
T-shirt/top | Training | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b”\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
T-shirt/top | Training | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
Jurk | Training | b”\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
T-shirt/top | Training | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
Het gebruik van SQL-instructies maakt het gegevensverkenningsproces eenvoudig. De onderstaande SQL-instructie toont bijvoorbeeld de afbeeldingsdistributie per afbeeldingslabel.
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)
Afbeeldingslabel | Trainingsafbeeldingen | Afbeeldingen testen | |
0 | Enkellaars | 6000 | 1000 |
1 | Tas | 6000 | 1000 |
2 | Jas | 6000 | 1000 |
3 | Jurk | 6000 | 1000 |
4 | Trui | 6000 | 1000 |
5 | Sandaal | 6000 | 1000 |
6 | Overhemd | 6000 | 1000 |
7 | Sneaker | 6000 | 1000 |
8 | T-shirt/top | 6000 | 1000 |
9 | Broek | 6000 | 1000 |
Er zijn 6.000 afbeeldingen voor elk label in de trainingsset en 1.000 afbeeldingen voor elk label in de testset. Er zijn in totaal 60.000 afbeeldingen in de trainingsset en in totaal 10.000 afbeeldingen in de testset.
Individuele kledingstukken worden opgeslagen als afbeeldingen met een lage resolutie. Omdat de database die afbeeldingen efficiënt kan opslaan als Binary Large OBjects (BLOB's), is het heel eenvoudig om een afbeelding op te halen met SQL, zoals hieronder weergegeven:
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)
hierboven:afbeelding uit dataset fashion_mnist
Dit eerste deel van de blogreeks heeft laten zien hoe een relationele database kan worden gebruikt om gegevens van afbeeldingen op te slaan en uit te voeren met behulp van eenvoudige SQL-instructies. Deel 2 laat zien hoe de gegevens kunnen worden geformatteerd in de gegevensstructuren die TensorFlow nodig heeft, en vervolgens hoe het model te trainen, voorspellingen uit te voeren (d.w.z. afbeeldingen te identificeren) en die voorspellingen weer op te slaan in de database voor verdere analyse of gebruik.
MIT-licentie
De dataset Fashion MNIST (fashion_mnist) die door deze blog wordt gebruikt, valt onder de MIT-licentie.
De MIT-licentie (MIT) Copyright © 2017 Zalando SE, https://tech.zalando.com
Hierbij wordt kosteloos toestemming verleend aan eenieder die een kopie van deze software en bijbehorende documentatiebestanden (de "Software") verkrijgt, om zonder beperking in de Software te handelen, inclusief maar niet beperkt tot de rechten om de Software te gebruiken, kopiëren, wijzigen, samenvoegen, publiceren, distribueren, in sublicentie te geven en/of te verkopen, en om personen aan wie de Software wordt geleverd toe te staan dit te doen, met inachtneming van de volgende voorwaarden:
De bovenstaande copyrightkennisgeving en deze toestemmingskennisgeving zullen worden opgenomen in alle kopieën of substantiële delen van de Software.
DE SOFTWARE WORDT GELEVERD "AS IS", ZONDER ENIGE GARANTIE, EXPLICIET OF IMPLICIET, INCLUSIEF MAAR NIET BEPERKT TOT DE GARANTIES VAN VERKOOPBAARHEID, GESCHIKTHEID VOOR EEN BEPAALD DOEL EN NIET-INBREUK. IN GEEN GEVAL ZULLEN DE AUTEURS OF HOUDERS VAN HET AUTEURSRECHT AANSPRAKELIJK ZIJN VOOR ENIGE CLAIM, SCHADE OF ANDERE AANSPRAKELIJKHEID, HETZIJ IN EEN OVEREENKOMST, ONRECHTMATIGE OF ANDERE, VOORTVLOEIENDE UIT, UIT OF IN VERBAND MET DE SOFTWARE OF HET GEBRUIK IN OF DE ANDERE HANDELINGEN SOFTWARE.
Referenties
Converteer eigen afbeelding naar de afbeelding van MNIST
matplotlib:zelfstudie afbeeldingen
5 manieren waarop AI de klantervaring transformeert
Digitalisering vindt het bedrijfsleven opnieuw uit
Wat is afbeeldingsclassificatie?
Inleiding tot de Python Deep Learning-bibliotheek TensorFlow