我正在建立CNN以进行叶子识别。
我正在使用以下数据集:leafnsap dataset
就我而言,加载图像并将其转换为np数组并使用Keras构建模型没有问题。
我很难建立价值矩阵。
此矩阵应具有以下大小:[图像数] [标签数]
如果位置i处的图像具有与位置j处的标签矩阵相同的标签,则每个[i] [j]位置均等于1。 否则为0。
这是txt(csv)文件的样子: data
以下是一些代码:
#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)])
在这一点上,我找不到如何执行这种简单的操作。谢谢您的帮助。
答案 0 :(得分: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