将标签数据添加到卷积神经网络的更好方法?



我正在研究图像分类CNN来练习理解机器学习,我希望尽可能保持对正在发生的事情的具体理解,同时保持一定的效率。

我有一个目录结构,如下所示:

training folder 
3 folders named 0, 1, 2
0 contains only pictures of cats
1 contains only pictures of dogs
2 contains only pictures of ducks
testing folder 
3 folders named 0, 1, 2
0 contains only pictures of cats
1 contains only pictures of dogs
2 contains only pictures of ducks

我创建了这段代码来浏览文件夹 0,将所有图像(猫(转换为图像数组,然后转到文件夹 1 并对所有图像(狗(执行相同的操作,最后转到文件夹 2 并对鸭子重复。然后,我将返回的列表转换为定义为 x_train 的 numpy 数组以馈送到模型中。

def get_img_array(dir):
for num in range(0,3):
image_list = [img for img in os.listdir(dir + str(num)) if img.endswith('.jpg')]
for img_name in range(0,len(image_list)):
loaded_image = image.load_img(dir + str(num) + '\' + str(image_list[img_name]), grayscale = False)
process_img = image.img_to_array(loaded_image)
processed_list.append(process_img/255)
return processed_list

但我不确定如何继续给他们标签y_train和y_test

我知道我可以创建一个 csv 文件,其中包含每个图像的名称和相应的标签,例如"0"、"1"和"2",具体取决于图片并在下一列中以这种方式导入它们,但我很好奇是否有更好、更有效的方法使用我目前拥有的结构添加标签?

我试图研究和查看 GitHub 存储库、指南和 SO 问题(不幸的是,卷积神经网络标签没有有用的答案(,但我只遇到过几乎没有解释的数据集,或者它是从某种我不知道的预先标记的数据库中导入的,所以深入的解释会很棒!

您可以在创建像素数组的同时创建标签数组。假设您的类别cat=0,dog=1,ducks=2初始化一个空的numpy数组并为每个文件夹创建标签数组,并连接每个数组以获取最终标签。

def get_img_array(dir):
labels_arr= np.empty(shape=[0,1])
for num in range(0,3):
image_list = [img for img in os.listdir(dir + str(num)) if img.endswith('.jpg')]
for img_name in range(0,len(image_list)):
loaded_image = image.load_img(dir + str(num) + '\' + str(image_list[img_name]), grayscale = False)
process_img = image.img_to_array(loaded_image)
processed_list.append(process_img/255)
labels = np.full((len(image_list),1),num)
labels_arr= np.concatenate((labels_arr, labels))
return processed_list,labels_arr

也检查此答案以获得更直观的信息。 如何为图像分类准备训练数据

最新更新