Špičkové společnosti se obracejí na umělou inteligenci a strojové učení, aby čelily výzvám nové éry digitální obchodní transformace.
Podle společnosti Gartner:„Osmdesát sedm procent vedoucích firem tvrdí, že digitalizace je prioritou společnosti a 79 % firemních stratégů říká, že znovuobjevuje jejich podnikání – vytváří nové zdroje příjmů novými způsoby “.
Zdroj :Gartner, zrychlete transformaci své digitální firmy, 15. ledna 2019
Doposud však byla digitální změna náročná. Složitost nástrojů, architektury a prostředí vytváří překážky pro používání strojového učení. Použití správy relačních dat na bázi SQL k ukládání a provádění průzkumu dat obrázků snižuje překážky a odemyká výhody strojového učení.
Tento blogový příspěvek ukazuje použití populárních open source nástrojů MariaDB Server, TensorFlow Python knihovny a Keras neuronové sítě ke zjednodušení složitosti implementace strojového učení. Použití těchto technologií vám může pomoci urychlit váš čas uvedení na trh efektivním přístupem, aktualizací, vkládáním, manipulací a úpravou dat.
Strojové učení na relačních databázích
V centru transformace digitálního podnikání, kterou umožňuje strojové učení, jsou technologie, jako jsou chatboti, doporučovací nástroje, personalizovaná komunikace, inteligentní cílení reklam a klasifikace obrázků.
Klasifikace obrázků má širokou škálu případů použití – od vymáhání práva a armády až po maloobchodní a samořídící auta. Při implementaci pomocí strojového učení může klasifikace obrázků poskytovat obchodní inteligenci v reálném čase. Cílem klasifikace obrázků je identifikovat a zobrazit, jako jedinečnou úroveň šedé (nebo barvy), rysy vyskytující se na obrázku. Nejběžnějšími nástroji pro klasifikaci obrázků jsou TensorFlow a Keras.
TensorFlow je knihovna Pythonu pro rychlé numerické výpočty vytvořená a vydaná společností Google. MariaDB Server je open source relační databáze s rozhraním SQL pro přístup a správu dat. Keras je open-source knihovna neuronových sítí napsaná v Pythonu.
V tomto příspěvku zjistíte, jak otestovat klasifikaci obrázků povolením interoperability mezi TensorFlow a MariaDB Server. Tento příspěvek používá datovou sadu Fashion MNIST, která obsahuje 70 000 obrázků ve stupních šedi v 10 kategoriích. Obrázky zobrazují jednotlivé kusy oblečení v nízkém rozlišení (28 x 28 pixelů).
Načítání a příprava dat na server MariaDB je mimo rozsah tohoto příspěvku. Následující tabulky byly vytvořeny a předem naplněny datovou sadou Fashion MNIST.
Obrázky | Role obrázku | Štítek obrázku |
CREATE TABLE tf_images ( img_label tinyint(4), img_vector blob, img_idx int(10) bez znaménka NOT NULL, img_blob blob, img_use ) brint> ) ENGINE=VÝCHOZÍ CHARSET InnoDB=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, PRIMÁRNÍ KLÍČ (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 |
Průzkum dat
K provádění základního průzkumu dat se serverem MariaDB se používají následující knihovny:
- io modul poskytuje hlavní funkce Pythonu pro práci s různými typy I/O.
- Matplotlib je knihovna Pythonu pro 2D vykreslování pro vytváření různých grafů napříč platformami.
- Pandy nabízí datové struktury a operace pro manipulaci s číselnými tabulkami a časovými řadami.
- pymysql balíček obsahuje čistě Pythonovou klientskou knihovnu pro přístup k serveru MariaDB.
Začněme připojením k databázovému serveru přes 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()
Po připojení k serveru MariaDB lze snímky v databázi snadno přistupovat a spravovat. Všechny obrázky použité pro trénování a testování modelu jsou uloženy v jediné tabulce (tf_images). Jak bude obrázek použit, je definováno v tabulce použití obrázku (img_use). V tomto případě má tabulka pouze dvě n-tice, trénovací a testovací:
sql="SELECT use_name AS 'Image Role' , use_desc AS 'Description' FROM img_use" display( pd.read_sql(sql,conn) )
Role obrázku | Popis |
Školení | Obrázek se používá pro trénování modelu |
Testování | Obrázek se používá pro testování modelu |
Mapování cílových atributů na obrazové objekty v datové množině se nazývá označování. Definice štítku se liší od aplikace k aplikaci a stěží existuje univerzální definice toho, co je „správný“ štítek pro obrázek. Použití relační databáze zjednodušuje proces označování a poskytuje způsob přechodu od hrubých k jemnozrnným štítkům.
V tomto příkladu s použitím tabulky „kategorií“ má obrázek pouze jeden štítek (hrubý), jak je znázorněno níže:
sql="SELECT class_name AS 'Class Name' FROM categories" display( pd.read_sql(sql,conn) )
Název třídy | |
0 | Tričko/top |
1 | Kalhoty |
2 | pulovr |
3 | Šaty |
4 | Kabát |
5 | Sandál |
6 | Košile |
7 | Tenisky |
8 | Taška |
9 | Kotíková obuv |
Obrázky tabulka obsahuje všechny obrázky, které mají být použity pro školení a testování. Každý obrázek má jedinečný identifikátor, štítek a informaci o tom, zda se používá pro školení nebo testování modelu. Obrázky jsou uloženy v původním formátu PNG a jako předzpracované tenzory s pohyblivou řádovou čárkou. Jednoduché vnitřní spojení na této tabulce lze provést k zobrazení reprezentací obrázku (vektorový nebo png formát), jeho štítku a zamýšleného použití.
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) )
Název třídy | Použití obrázku | Vektorové znázornění | Obrázek PNG |
Kotníková obuv | Školení | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
Tričko/top | Školení | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b”\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
Tričko/top | Školení | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
Šaty | Školení | b”\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
Tričko/top | Školení | b’\x80\x02cnumpy.core.multiarray\n_reconstruct… | b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\… |
Použití příkazů SQL usnadňuje proces průzkumu dat. Například příkaz SQL níže ukazuje rozložení obrázku podle štítku obrázku.
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)
Štítek obrázku | Tréninkové obrázky | Testovací obrázky | |
0 | Kotíková obuv | 6000 | 1000 |
1 | Taška | 6000 | 1000 |
2 | Kabát | 6000 | 1000 |
3 | Šaty | 6000 | 1000 |
4 | pulovr | 6000 | 1000 |
5 | Sandál | 6000 | 1000 |
6 | Košile | 6000 | 1000 |
7 | Tenisky | 6000 | 1000 |
8 | Tričko/top | 6000 | 1000 |
9 | Kalhoty | 6000 | 1000 |
Existuje 6 000 obrázků pro každý štítek v tréninkové sadě a 1 000 obrázků pro každý štítek v testovací sadě. V tréninkové sadě je celkem 60 000 obrázků a v testovací sadě celkem 10 000 obrázků.
Jednotlivé kusy oblečení jsou uloženy jako obrázky s nízkým rozlišením. Protože databáze dokáže tyto obrázky efektivně ukládat jako binární velké objekty (BLOB), je velmi snadné získat obrázek pomocí SQL, jak je znázorněno níže:
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)
nahoře:obrázek z datové sady fashion_mnist
Tato první část série blogů ukázala, jak lze použít relační databázi k ukládání a provádění průzkumu dat obrázků pomocí jednoduchých příkazů SQL. Část 2 ukáže, jak formátovat data do datových struktur potřebných pro TensorFlow, a jak potom trénovat model, provádět předpovědi (tj. identifikovat obrázky) a ukládat tyto předpovědi zpět do databáze pro další analýzu nebo použití.
Licence MIT
Datový soubor Fashion MNIST (fashion_mnist) využívaný tímto blogem je licencován pod licencí MIT.
Licence MIT (MIT) Copyright © 2017 Zalando SE, https://tech.zalando.com
Tímto se bezplatně uděluje oprávnění jakékoli osobě, která získá kopii tohoto softwaru a souvisejících souborů dokumentace (dále jen „Software“), nakládat se softwarem bez omezení, včetně, bez omezení, práv používat, kopírovat, upravovat, slučovat, publikovat, distribuovat, poskytovat sublicence a/nebo prodávat kopie Softwaru a umožnit osobám, kterým je Software poskytnut, aby tak činily, za následujících podmínek:
Výše uvedené oznámení o autorských právech a toto oznámení o povolení musí být součástí všech kopií nebo podstatných částí Softwaru.
SOFTWARE JE POSKYTOVÁN „TAK, JAK JE“, BEZ ZÁRUKY JAKÉHOKOLI DRUHU, VÝSLOVNÉ NEBO PŘEDPOKLÁDANÉ, VČETNĚ ZÁRUK PRODEJNOSTI, VHODNOSTI PRO KONKRÉTNÍ ÚČEL A NEPORUŠENÍ PRÁV. V ŽÁDNÉM PŘÍPADĚ NENESOU AUTOŘI NEBO NOSITELÉ AUTORSKÝCH PRÁV ODPOVĚDNÍ ZA JAKÉKOLI NÁROKY, ŠKODY NEBO JINÉ ODPOVĚDNOSTI, AŤ JIŽ PŘI SMLUVNÍ AKCI, DELIKTŮ ČI JINAK, VYPLÝVAJÍCÍCH Z TOHOTO POUŽÍVÁNÍ NEBO V SOUVISLOSTI S NÍM SOFTWARE.
Odkazy
Převeďte vlastní obrázek na obrázek MNIST
matplotlib:Výukový program pro obrázky
5 způsobů, jak umělá inteligence mění zákaznickou zkušenost
Digitalizace znovuobjevuje podnikání
Co je klasifikace obrázků?
Úvod do Pythonu Knihovna hlubokého učení TensorFlow