我可以使用CNN的Keras从图像名称中提取图像数据集的标签吗?



我想设计一个CNN模型来对一个有20万种不同字体和字母的图像数据集进行分类。图像在8个不同的文件夹中,文件夹名称为1到8类。我想对这个文件夹中的图像进行分类,以了解这些图像显示的是什么字母。如果没有任何显示字母表的文件,我怎么能做到这一点呢?

train_ds = tf.keras.preprocessing.image_dataset_from_directory(
directory, label = None, 
validation_split=0.2,
subset="training",
seed=123,
image_size=(32, 32),
batch_size=batch_size
)

我使用这个代码来使用我的数据集进行训练和验证。目录是这样的

main_directory/
...class_a/
......a_image_1.jpg
.
.
......a_image_1000.jpg
......b_image_1.jpg
.
......b_image_1000.jpg
.
.
.
......y_image_1.jpg
.
.
......y_image_1000.jpg
......z_image_1.jpg
.
.
......z_image_1000.jpg
...class_b/
......a_image_1000.jpg
.
.
......a_image_2000.jpg
......b_image_1000.jpg
.
......b_image_2000.jpg
.
.
.
......y_image_1000.jpg
.
.
......y_image_2000.jpg
......z_image_1000.jpg
.
.
......z_image_2000.jpg

这个不能让我看到带有train_ds

的标签

Keras通常不会一次加载所有数据以节省内存,它不能有命名分解。

当文件未排序时,您可以尝试使用下面的代码片段与shutilos一起相应地隔离文件并加载基于文件夹的数据生成器以将数据提供给模型

import os
from shutil import move
folder = 'data folder path'
for clas in os.listdir(folder):
for file in os.listdir(os.path.join(folder, clas)):
class_label = file.split('_')[0]
class_folder = os.path.join(folder, 'class_{}'.format(class_label))
os.makedirs(class_folder, exist_ok=True)
move(os.path.join(folder,clas, file), os.path.join(folder, class_folder, file))


# load and iterate training dataset
train_it = datagen.flow_from_directory('data/train/', class_mode='binary', batch_size=64)
# load and iterate validation dataset
val_it = datagen.flow_from_directory('data/validation/', class_mode='binary', batch_size=64)
# load and iterate test dataset
test_it = datagen.flow_from_directory('data/test/', class_mode='binary', batch_size=64)

最新更新