深度学习——划分自定义数据集

深度学习------划分自定义数据集

以人脸表情数据集raf_db为例,初始目录如下:

需要经过处理后返回

train_images, train_label, val_images, val_label

定义 read_split_data(root: str, val_rate: float = 0.2) 方法来解决,代码如下:

python 复制代码
# root:数据集所在路径
# val_rate:划分测试集的比例

def read_split_data(root: str, val_rate: float = 0.2):

    random.seed(0)  # 保证随机结果可复现
    assert os.path.exists(root), "dataset root: {} does not exist.".format(root)

    # 遍历文件夹,一个文件夹对应一个类别
    file_class = [cla for cla in os.listdir(root) if os.path.isdir(os.path.join(root, cla))]
    # 排序,保证各平台顺序一致
    file_class.sort()
    # 生成类别名称以及对应的数字索引
    class_indices = dict((k, v) for v, k in enumerate(file_class))
    json_str = json.dumps(dict((val, key) for key, val in class_indices.items()), indent=4)
    with open('class_indices.json', 'w') as json_file:
        json_file.write(json_str)

    train_images = []  # 存储训练集的所有图片路径
    train_label = []  # 存储训练集图片对应索引信息
    val_images = []  # 存储验证集的所有图片路径
    val_label = []  # 存储验证集图片对应索引信息
    every_class_num = []  # 存储每个类别的样本总数
    supported = [".jpg", ".JPG", ".png", ".PNG"]  # 支持的文件后缀类型

    # 遍历每个文件夹下的文件
    for cla in file_class:
        cla_path = os.path.join(root, cla)
        # 遍历获取supported支持的所有文件路径
        images = [os.path.join(root, cla, i) for i in os.listdir(cla_path)
                  if os.path.splitext(i)[-1] in supported]
        # 排序,保证各平台顺序一致
        images.sort()
        # 获取该类别对应的索引
        image_class = class_indices[cla]
        # 记录该类别的样本数量
        every_class_num.append(len(images))
        # 按比例随机采样验证样本
        val_path = random.sample(images, k=int(len(images) * val_rate))

        for img_path in images:
            if img_path in val_path:  # 如果该路径在采样的验证集样本中则存入验证集
                val_images.append(img_path)
                val_label.append(image_class)
            else:  # 否则存入训练集
                train_images.append(img_path)
                train_label.append(image_class)

    print("{} images were found in the dataset.".format(sum(every_class_num)))
    print("{} images for training.".format(len(train_images)))
    print("{} images for validation.".format(len(val_images)))
    assert len(train_images) > 0, "number of training images must greater than 0."
    assert len(val_images) > 0, "number of validation images must greater than 0."

    return train_images, train_label, val_images, val_label

此时可通过以下代码获得训练集和测试集数据:

python 复制代码
train_images, train_label, val_images, val_label = read_split_data(data_path)

完结撒花。

相关推荐
rocksun3 分钟前
OneUptime MCP服务器:AI原生可观测性融入你的工作流程
人工智能·监控
weisian15112 分钟前
人工智能-基础篇-10-什么是卷积神经网络CNN(网格状数据处理:输入层,卷积层,激活函数,池化层,全连接层,输出层等)
人工智能·神经网络·cnn
静心问道35 分钟前
SELF-INSTRUCT:使用自生成指令对齐语言模型
人工智能·语言模型·大模型
芷栀夏41 分钟前
基于Anything LLM的本地知识库系统远程访问实现路径
数据库·人工智能
AI生存日记41 分钟前
AI 日报:阿里、字节等企业密集发布新技术,覆盖语音、图像与药物研发等领域
人工智能·华为云·语音识别·open ai大模型
hjs_deeplearning1 小时前
认知篇#10:何为分布式与多智能体?二者联系?
人工智能·分布式·深度学习·学习·agent·智能体
瑶光守护者1 小时前
【卫星通信】超低比特率语音编解码器(ULBC)的信道特性评估
深度学习·华为·卫星通信·3gpp·ulbc
kngines1 小时前
【字节跳动】数据挖掘面试题0001:打车场景下POI与ODR空间关联查询
人工智能·数据挖掘·面试题
.30-06Springfield3 小时前
利用人名语言分类案例演示RNN、LSTM和GRU的区别(基于PyTorch)
人工智能·pytorch·python·rnn·分类·gru·lstm
xingshanchang5 小时前
PyTorch 不支持旧GPU的异常状态与解决方案:CUDNN_STATUS_NOT_SUPPORTED_ARCH_MISMATCH
人工智能·pytorch·python