Modernste Unternehmen wenden sich der künstlichen Intelligenz und dem maschinellen Lernen zu, um die Herausforderungen der neuen Ära der digitalen Geschäftstransformation zu meistern.
Laut Gartner:„Siebenundachtzig Prozent der Führungskräfte in der Wirtschaft geben an, dass die Digitalisierung eine Unternehmenspriorität ist, und 79 % der Unternehmensstrategen sagen, dass sie ihr Geschäft neu erfindet – neue Einnahmequellen auf neue Weise erschließt “.
Quelle :Gartner, Beschleunigen Sie Ihre digitale Geschäftstransformation, 15. Januar 2019
Doch bisher war der digitale Wandel eine Herausforderung. Die Komplexität der Tools, der Architektur und der Umgebung schafft Hindernisse für die Verwendung von maschinellem Lernen. Die Verwendung von SQL-basierter relationaler Datenverwaltung zum Speichern und Durchführen von Datenexplorationen von Bildern reduziert die Barrieren und erschließt die Vorteile des maschinellen Lernens.
Dieser Blogbeitrag demonstriert die Verwendung der beliebten Open-Source-Tools MariaDB Server, der TensorFlow-Python-Bibliothek und der neuronalen Netzwerkbibliothek von Keras, um die Komplexität der Implementierung von maschinellem Lernen zu vereinfachen. Durch den Einsatz dieser Technologien können Sie Ihre Markteinführungszeit verkürzen, indem Sie effizient auf Daten zugreifen, diese aktualisieren, einfügen, manipulieren und ändern.
Maschinelles Lernen auf relationalen Datenbanken
Im Mittelpunkt der durch maschinelles Lernen ermöglichten digitalen Geschäftstransformation stehen Technologien wie Chatbots, Empfehlungsmaschinen, personalisierte Kommunikation, intelligentes Anzeigen-Targeting und Bildklassifizierung.
Die Bildklassifizierung hat eine Vielzahl von Anwendungsfällen – von der Strafverfolgung und dem Militär bis hin zum Einzelhandel und selbstfahrenden Autos. Bei der Implementierung mit maschinellem Lernen kann die Bildklassifizierung Business Intelligence in Echtzeit bereitstellen. Das Ziel der Bildklassifizierung besteht darin, die in einem Bild vorkommenden Merkmale zu identifizieren und als eindeutige Graustufe (oder Farbe) darzustellen. Die gängigsten Tools zur Bildklassifizierung sind TensorFlow und Keras.
TensorFlow ist eine Python-Bibliothek für schnelle numerische Berechnungen, die von Google erstellt und veröffentlicht wurde. MariaDB Server ist eine relationale Open-Source-Datenbank mit einer SQL-Schnittstelle für den Zugriff auf und die Verwaltung von Daten. Keras ist eine in Python geschriebene Open-Source-Bibliothek für neuronale Netzwerke.
In diesem Beitrag erfahren Sie, wie Sie die Bildklassifizierung testen, indem Sie die Interoperabilität zwischen TensorFlow und MariaDB Server aktivieren. Dieser Beitrag verwendet den Fashion MNIST-Datensatz, der 70.000 Graustufenbilder in 10 Kategorien enthält. Die Bilder zeigen einzelne Kleidungsstücke in niedriger Auflösung (28 x 28 Pixel).
Das Laden und Vorbereiten der Daten in MariaDB Server ist nicht Gegenstand dieses Beitrags. Die folgenden Tabellen wurden erstellt und im Voraus mit dem Fashion MNIST-Datensatz gefüllt.
Bilder | Bildrolle | Bildlabel |
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 DEFAULT 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 |
Datenexploration
Die folgenden Bibliotheken werden verwendet, um grundlegende Datenanalysen mit MariaDB Server durchzuführen:
- Das io -Modul bietet Pythons Hauptfunktionen für den Umgang mit verschiedenen Arten von E/A.
- Matplotlib ist eine Python-2D-Plotbibliothek, um eine Vielzahl von Diagrammen plattformübergreifend zu erstellen.
- Pandas bietet Datenstrukturen und Operationen zur Manipulation von numerischen Tabellen und Zeitreihen.
- Die pymysql Paket enthält eine reine Python-Client-Bibliothek für den Zugriff auf MariaDB Server.
Beginnen wir damit, uns über Python mit dem Datenbankserver zu verbinden:
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()
Sobald die Verbindung zum MariaDB-Server hergestellt ist, können die Bilder in der Datenbank einfach aufgerufen und verwaltet werden. Alle zum Trainieren und Testen des Modells verwendeten Bilder werden in einer einzigen Tabelle (tf_images) gespeichert. Wie das Bild verwendet wird, wird in der Bildverwendungstabelle (img_use) definiert. In diesem Fall hat die Tabelle nur zwei Tupel, Training und Testing:
sql="SELECT use_name AS 'Image Role' , use_desc AS 'Description' FROM img_use" display( pd.read_sql(sql,conn) )
Bildrolle | Beschreibung |
Schulung | Das Bild wird zum Trainieren des Modells verwendet |
Testen | Das Bild wird zum Testen des Modells verwendet |
Das Zuordnen von Zielattributen zu Bildobjekten in einem Datensatz wird als Labeling bezeichnet. Die Bezeichnungsdefinition variiert von Anwendung zu Anwendung, und es gibt kaum eine universelle Definition dessen, was eine „richtige“ Bezeichnung für ein Bild ist. Die Verwendung einer relationalen Datenbank vereinfacht den Beschriftungsprozess und bietet eine Möglichkeit, von grobkörnigen zu feinkörnigen Beschriftungen zu wechseln.
In diesem Beispiel mit der Tabelle „Kategorien“ hat ein Bild nur ein Label (grob), wie unten gezeigt:
sql="SELECT class_name AS 'Class Name' FROM categories" display( pd.read_sql(sql,conn) )
Klassenname | |
0 | T-Shirt/Oberteil |
1 | Hose |
2 | Pullover |
3 | Kleid |
4 | Mantel |
5 | Sandale |
6 | Hemd |
7 | Sneaker |
8 | Tasche |
9 | Stiefelette |
Die Bilder Tabelle enthält alle Bilder, die für Training und Tests verwendet werden sollen. Jedes Bild hat eine eindeutige Kennung, ein Label und ob es zum Trainieren oder Testen des Modells verwendet wird. Die Bilder werden in ihrem ursprünglichen PNG-Format und als vorverarbeitete Fließkomma-Tensoren gespeichert. Ein einfacher innerer Join auf dieser Tabelle kann ausgeführt werden, um die Bilddarstellungen (Vektor- oder PNG-Format), ihre Beschriftung und die beabsichtigte Verwendung anzuzeigen.
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) )
Klassenname | Bildnutzung | Vektordarstellung | Bild-PNG |
Stiefelette | Schulung | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
T-Shirt/Oberteil | Schulung | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b”\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
T-Shirt/Oberteil | Schulung | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
Kleid | Schulung | b”\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
T-Shirt/Oberteil | Schulung | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
Die Verwendung von SQL-Anweisungen vereinfacht den Datenexplorationsprozess. Die folgende SQL-Anweisung zeigt beispielsweise die Bildverteilung nach Bildbezeichnung.
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)
Bildlabel | Schulungsbilder | Bilder testen | |
0 | Stiefelette | 6000 | 1000 |
1 | Tasche | 6000 | 1000 |
2 | Mantel | 6000 | 1000 |
3 | Kleid | 6000 | 1000 |
4 | Pullover | 6000 | 1000 |
5 | Sandale | 6000 | 1000 |
6 | Hemd | 6000 | 1000 |
7 | Sneaker | 6000 | 1000 |
8 | T-Shirt/Oberteil | 6000 | 1000 |
9 | Hose | 6000 | 1000 |
Es gibt 6.000 Bilder für jedes Etikett im Trainingssatz und 1.000 Bilder für jedes Etikett im Testsatz. Das Trainingsset enthält insgesamt 60.000 Bilder und das Testset insgesamt 10.000 Bilder.
Einzelne Kleidungsstücke werden als Bilder mit niedriger Auflösung gespeichert. Da die Datenbank diese Bilder effizient als Binary Large OBjects (BLOBs) speichern kann, ist es sehr einfach, ein Bild mit SQL abzurufen, wie unten gezeigt:
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)
oben:Bild aus dem fashion_mnist-Datensatz
Dieser erste Teil der Blogserie hat gezeigt, wie eine relationale Datenbank zum Speichern und Durchführen von Datenexplorationen von Bildern mit einfachen SQL-Anweisungen verwendet werden kann. Teil 2 zeigt, wie die Daten in die von TensorFlow benötigten Datenstrukturen formatiert und dann das Modell trainiert, Vorhersagen durchgeführt (d. h. Bilder identifiziert) und diese Vorhersagen zur weiteren Analyse oder Verwendung wieder in der Datenbank gespeichert werden.
MIT-Lizenz
Der von diesem Blog genutzte Dataset Fashion MNIST (fashion_mnist) ist unter der MIT-Lizenz lizenziert.
Die MIT-Lizenz (MIT) Copyright © 2017 Zalando SE, https://tech.zalando.com
Hiermit wird jeder Person, die eine Kopie dieser Software und der dazugehörigen Dokumentationsdateien (die „Software“) erhält, kostenlos die Erlaubnis erteilt, uneingeschränkt mit der Software zu handeln, einschließlich, aber nicht beschränkt auf die Rechte, Kopien der Software zu verwenden, zu kopieren, zu modifizieren, zusammenzuführen, zu veröffentlichen, zu verteilen, Unterlizenzen zu vergeben und/oder Kopien der Software zu verkaufen und Personen, denen die Software zur Verfügung gestellt wird, dies zu gestatten, vorbehaltlich der folgenden Bedingungen:
Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.
DIE SOFTWARE WIRD OHNE MÄNGELGEWÄHR BEREITGESTELLT, OHNE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF GEWÄHRLEISTUNGEN DER MARKTFÄHIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG VON RECHTEN DRITTER. DIE AUTOREN ODER URHEBERRECHTSINHABER SIND IN KEINEM FALL HAFTBAR FÜR ANSPRÜCHE, SCHÄDEN ODER SONSTIGE HAFTUNG, OB IN EINER VERTRAGSAKTION, UNERLAUBTER HANDLUNG ODER ANDERWEITIG, DIE SICH AUS, AUS ODER IM ZUSAMMENHANG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN HANDLUNGEN IN DER SOFTWARE ERGEBEN SOFTWARE.
Referenzen
Konvertieren Sie Ihr eigenes Bild in das Bild von MNIST
matplotlib:Bild-Tutorial
5 Wege, wie KI das Kundenerlebnis verändert
Digitalisierung erfindet das Geschäft neu
Was ist Bildklassifizierung?
Einführung in Python Deep-Learning-Bibliothek TensorFlow