创建分类标签矩阵

时间:2019-03-21 07:55:58

标签: python pandas numpy keras conv-neural-network

我正在建立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)])

在这一点上,我找不到如何执行这种简单的操作。谢谢您的帮助。

1 个答案:

答案 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