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!