Hasznos weboldalak – Towards Data Science, Medium ML blog

A deep learning-gel kapcsolatos kereséseim során találtam egy nagyon hasznos weboldalt, a Towards Data Science-t, az itt található cikkek sokat segítettek nekem megérteni a dolgokat. Ezenkívül érdekes cikkek sokasága olvasható itt különböző témákban, mint például mesterséges intelligencia (AI), gépi tanulás (Machine Learning) és akár általános programozás (Programming), ahol sok Python nyelvvel kapcsolatos cikk van, amire nekem szintén szükségem van a munkámhoz. Csak ajánlani tudom az oldalt, érthetően és érdekesen ír a különböző kérdésekről.

Continue reading

Saját adathalmaz használata CNN-hez

A Tensorflow oldalán lévő tutorialokban általában MNIST datasetet töltenek be a neurális háló tanítására és validálására. A képek előkészítését pythonban végzem.

Erre egy példa:

(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

Tehát a load_data() függvény feltölti a train_images, train_labels, test_images és test_labels változókat, melyek numpy arrayként fogják tárolni az adatokat.
Ehhez hasonlóan megírható egy saját load_data() függvény, ha saját adathalmazt szeretnénk használni.

Az adathalmazom 256×256-os színes képekből áll.
Szükség lesz az adathalmaz elérési útvonalára, majd a képeket tartalmazó mappát be kell járni, a fájlokon esetleges módosításokat végezni és eltárolni azokat.
A képek például sources mappán belüli train és val mappákban szerepelnek elkülönítve. A használathoz szükségünk van az elérési útvonalra:

train_dir = os.path.dirname(os.path.realpath('__file__'))+r'\sources\train'

Hasonlóan a validációs adatok mappája is eltárolandó a ‘train’ szót kicserélve ‘val’-ra.
Az útvonal ismeretében bejárható a mappa, ehhez egy segédmetódust fogok használni.

  • A directory elérési útvonalú mappát járom be (ez nálam a train vagy a val), ezen belül szerepelnek kategóriánként a képek, ezeket a kategórianeveket mentem el labelként.
  • Az inner_dir a kategória mappa neve, ebből csinálok elérési útvonalat.
  • A kategória mappákban lévő képek beolvasása scipy lib haszálatával. Esetleges módosítások.
  • Adatok numpy array-jé alakítása
  • Visszatérés (data, labels) formában.
def load_data_by_dir(directory):
    for inner_dir in os.listdir(directory):
        category = directory+'\\'+os.fsdecode(inner_dir)
        for file_name in os.listdir(category):
            img = misc.imread(category+'\\'+file_name)
            data.append(img)
            labels.append(inner_dir)
        data = np.asarray(data)
        labels = np.asarray(labels)
    return (data, labels)

A saját load_data függvényünkben meghívjuk ezt a segéd függvényt kétszer, paraméterben egyszer a train_dir-t, egyszer pedig a val_dir-t átadva. A segédfüggvények értékével pedig visszatérünk (train_images, train_labels), (test_images, test_labels) formában.

Felmerülő problémák:

  • Fekete fehér kép keveredik a színesek közé, ennek más lesz az alakja is.
 if img.shape != (256, 256, 3): img = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB)
  • Lebegőpontos számábrázolásban kell tárolni a képeket egész számok helyett.
 img = np.float32(img)
  • Képek értékeit normalizálni kell.
 img = cv2.normalize(img, None, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F)
  • Képek átméretezése. Itt felére.
 img = misc.imresize(img, 0.5)
  • A labeleknek is számoknak kell lenniük!

 

Epoch vs. Batch size vs. Iterations

Szükségünk van olyan terminológiákra, mint az epochs, batch size, iterations, ha az adatok túl nagyok, ami a gépi tanulás során minden alkalommal megtörténik, és nem tudjuk egyszerre átadni az összes adatot a számítógépnek. Ennek a problémának a leküzdéséhez az adatokat kisebb méretűre kell osztanunk, és egyenként meg kell adnunk a számítógépünknek, és minden lépés végén frissítenünk kell a neurális hálózatok súlyát, hogy illeszkedjenek az adott adatokhoz.

Continue reading

TensorFlow modell építéséhez használt függvények (regresszió)

A TensorFlow regressziós példáján keresztül utánanéztem, hogy egy modell építése során használt egyes függvényeknek milyen argumentumai lehetnek és ezek mit jelentenek. A regressziós probléma esetén egy folyamatos érték, például ár vagy valószínűség előrejelzése a célunk. Ellenben az osztályozási problémával, amikor egy címkét akarunk megjósolni, például, hogy egy kép milyen fajta ruhadarabot ábrázol.

Continue reading

Convolutional Neural Networks és Tensorflow

Korábban már írtam a konvolúciós neurális hálózatok felépétéséről, ez a poszt a következő linken érhető el: http://www.dotnetszeged.hu/mic/?p=1750
Most pedig azt szeretném bemutatni, hogy a tensorflow segítségével miként lehet felépíteni a modellünket.
A modell megalkotásához a tf.layers modulra van szükség, mely metódusokat tartalmaz az egyes rétegek beállításához.
Continue reading

Convolutional Neural Network felépítése dióhéjban

Egy képről megállapítani, hogy mi látható rajta, az emberek számára nem bonyolult feladat. Különös erőfeszítés nélkül képesek vagyunk a körülöttünk levő tárgyakat címkékkel ellátni. A számítógépek viszont nem rendelkeznek ilyen tulajdonsággal. Ahhoz hogy mégis képesek legyenek ezekre a dolgokra, neurális hálók segítségével kell megtanítani őket.
Képek osztályozására használatos konvolúciós neurális hálók területe 2012-től robbanásszerűen kezdett fejlődni, amikor Alex Krizhevsky megnyerte az ImageNet versenyét azzal, hogy a hibázási rátát 26%-ról 15%-ra csökkentette. Continue reading