Создание категориальной матрицы меток - PullRequest
0 голосов
/ 21 марта 2019

Я строю CNN для распознавания листьев.

Я использую этот набор данных: набор данных leafnsap

Столько, сколько у меня нет проблем с загрузкой изображений и преобразованием их в массив np и построением модели с помощью Keras.

У меня есть некоторые трудности при построении матрицы значений.

Эта матрица должна иметь следующий размер: [количество изображений] [количество меток]

И каждая позиция [i] [j] равна 1, если изображение в позиции i имеет ту же метку, что и матрица меток в позиции j. 0 иначе

Вот как выглядит файл txt (csv): данные

Вот код:

#imports
import numpy as np
import pandas as pd
import matplotlib.pyplot  as plt
import cv2
import tensorflow as tf
from tensorflow import keras
#loading and visualization of the data
path_to_txt = "D:\DevData\lato_project\leafsnap-dataset\leafsnap-dataset- 
images_improved.txt"
df = pd.read_csv(path_to_txt ,sep='\t')
arr = np.array(df)
print(arr.shape)

печать: (30866, 4)

images = []
labels = []
for row in arr:
    if "lab" in row[0]:
        pass #nothing 
    else:
        if row[2] in labels:
            pass #nothing
        else:
            labels.append(row[2])
print(len(labels))

печать: 181 (это количество разных видов)

#values is supposed to be a [7524][181] binary matrix for the training of the cnn
for row in arr:
    if "lab" in row[0]:
        pass
    else:
        img = cv2.imread("leafsnap-dataset/" + row[0])
        img = cv2.resize(img,(260,200))
        images.append(img)
values = np.zeros([len(imges), len(labels)])

На данный момент я не могу найти, как выполнить эту простую операцию. Спасибо за помощь.

1 Ответ

1 голос
/ 21 марта 2019
from sklearn.preprocessing import OneHotEncoder

for row in arr:
    if "lab" in row[0]:
        pass
    else:
        img = cv2.imread("leafsnap-dataset/" + row[0])
        img = cv2.resize(img,(260,200))
        images.append(img)
        labels.append([row[2]])

obj = OneHotEncoder()
values = obj.fit_transform(labels).toarray()

Вы можете использовать метод inverse_transform, чтобы вернуть метку из кодировки.

https://scikit -learn.org / стабильный / модули / сгенерированный / sklearn.preprocessing.OneHotEncoder.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...