#python #pandas #numpy #keras #conv-neural-network
#python #pandas #numpy #keras #conv-нейронная сеть
Вопрос:
Я создаю 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:DevDatalato_projectleafsnap-datasetleafsnap-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:
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/stable/modules/generated/sklearn.preprocessing .OneHotEncoder.html