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!