我正在尝试做一个黑色素瘤的样本项目(来自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)
但我得到的是值列表而不是标签名称
1条答案
按热度按时间enyaitl31#
只需将
count
的index
替换为train_ds.class_names
,如下所示:确保事先对索引进行排序,因为它是按频率或首次出现排序的。