如何在keras中找到属于哪个类的图像数量

bihw5rsg  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(152)

我正在尝试做一个黑色素瘤的样本项目(来自kaggle的)。使用tf. keras. utils. image_dataset_from_directory我得到了train_ds,但我想打印出属于每个类的图像数量。例如:光化性角化病:基底细胞癌的x图像:y图像
我用来加载数据的代码是

data_dir = pathlib.Path("Train\\")
batch_size = 32
img_height = 180
img_width = 180

train_ds = tf.keras.utils.image_dataset_from_directory(
  data_dir,
  validation_split=0.2,
  subset="training",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

这将得到以下输出
找到6739个文件属于9类。使用5392个文件进行培训。这:

class_names = train_ds.class_names
print(class_names)

提供了类的名称
我如何看到多少图像属于哪个类?实现这一点的一种方法是使用下面的代码(取自github)计算目录下的文件数

def class_distribution_count(directory):
    count= []
    for path in pathlib.Path(directory).iterdir():
        if path.is_dir():
            count.append(len([name for name in os.listdir(path)
                               if os.path.isfile(os.path.join(path, name))]))
    sub_directory = [name for name in os.listdir(directory)
                    if os.path.isdir(os.path.join(directory, name))]
    return pd.DataFrame(list(zip(sub_directory,count)),columns =['Class', 'No. of Image'])
df = class_distribution_count(data_dir)
df

但我正在尝试看看是否有一种方法可以直接从keras数据集获得这个,而不必读取目录中的文件。
提前致谢
我也试过这个

import pandas as pd
dataset_unbatched = tuple(train_ds.unbatch())
labels = []
for (image,label) in dataset_unbatched:
    labels.append(label.numpy())
labels = pd.Series(labels)
count = labels.value_counts()
print(count)

但我得到的是值列表而不是标签名称

enyaitl3

enyaitl31#

只需将countindex替换为train_ds.class_names,如下所示:

import pandas as pd
dataset_unbatched = tuple(train_ds.unbatch())
labels = []
for (image,label) in dataset_unbatched:
    labels.append(label.numpy())
labels = pd.Series(labels)

# adjustments
count = labels.value_counts().sort_index()
count.index = ds.class_names

确保事先对索引进行排序,因为它是按频率或首次出现排序的。

相关问题