pytorch数据预处理1:Dataloader与DataSet

1.Dataloader与Dataset

2.代码示例

2.1拆分RMB_DATA数据集

2.1.1 os.path.dirname

import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
print("Base_dir:", BASE_DIR)
print("abspath:",os.path.abspath(__file__))

os.path.dirname(path)作用:去掉文件名,返回目录 

os.path.abspath(__file__) 作用: 获取当前脚本的完整路径

os.path.abspath(path) 作用: 返回绝对路径

所以输出:

Base_dir: D:\PycharmCode\HelloPytorch
abspath: D:\PycharmCode\HelloPytorch\test.py

2.1.2 os.path.join

path=os.path.join(BASE_DIR, "..", "..", "data", "RMB_data")
print("path",path)
dataset_dir = os.path.abspath(os.path.join(BASE_DIR, "..", "..", "data", "RMB_data"))
print("dataset_dir",dataset_dir)

输出:

path D:\PycharmCode\HelloPytorch\..\..\data\RMB_data
dataset_dir D:\data\RMB_data

2.1.3 os.walk(path)

  • 主要用来遍历一个目录内各个子目录和子文件
  • 是一个简单易用的文件、目录遍历器
for root, dirs, files in os.walk(dataset_dir):
    print("root",root)
    print("dirs", dirs)
    print("files",files)

输出:

root D:\data\RMB_data
dirs ['1', '100']
files []
root D:\data\RMB_data\1
dirs []
files ['01B68AKT.jpg', '01EIM65B.jpg', '01LNYXO4.jpg', '01MF2W5S.jpg', '01NISKCG.jpg', '02C4V1SW.jpg', '03WGM2XG.jpg', '03WV6GFZ.jpg', '049I6MVB.jpg', '04A32I57.jpg', '04MGL637.jpg', '04QE2KHA.jpg', '04QGLB16.jpg', '04RWK2B5.jpg', '04VRAHK2.jpg', '04YVW9CN.jpg', '059GS728.jpg', '05MLGSGI.jpg', '05MO1N93.jpg', '067TZA8C.jpg', '069N3OK2.jpg', '073LW92O.jpg', '07GVXBMG.jpg', '07HTXU3W.jpg', '07IUEGQX.jpg', '07PVUGTB.jpg', '07R6PKIX.jpg', '08596RNG.jpg', '08C3EHPG.jpg', '09F2SGOT.jpg', '09PUM1HY.jpg', '0B89KOA3.jpg', '0BGHNV6P.jpg', '0BRO7XVG.jpg', '0C4UDH9S.jpg', '0CNU427V.jpg', '0CTO7MER.jpg', '0D29EFZO.jpg', '0D6HCAXL.jpg', '0D73KYGN.jpg', '0DLF8NU6.jpg', '0DLW9G7O.jpg', '0DRZXTK3.jpg', '0E4QRCTS.jpg', '0E5Q62TM.jpg', '0E6AGCOW.jpg', '0EBSK2GF.jpg', '0EMSWVIR.jpg', '0EP9R4N8.jpg', '0EZ7ND18.jpg', '0F9CEKGH.jpg', '0FA8LD9Z.jpg', '0FY3IOKC.jpg', '0G7ZDUOL.jpg', '0GE1UZT5.jpg', '0GFISMAH.jpg', '0GHKAWQX.jpg', '0GP1SABX.jpg', '0GPYRDQM.jpg', '0GQBKCAW.jpg', '0GRZFSDG.jpg', '0GZN8V26.jpg', '0H2X15GN.jpg', '0H5TYFCG.jpg', '0HBEG1TG.jpg', '0HK5MCIY.jpg', '0HO24UXQ.jpg', '0I1X9SDG.jpg', '0IDB8M67.jpg', '0IPXU5A9.jpg', '0KOIAHWT.jpg', '0KS8UVFH.jpg', '0KYWGVO5.jpg', '0L7G631P.jpg', '0LWI5TZA.jpg', '0M9RSHZX.jpg', '0MN9158I.jpg', '0MNY59BW.jpg', '0MOHTNXQ.jpg', '0MRGZVBU.jpg', '0MVSIP89.jpg', '0NAQUMVX.jpg', '0NARV1BG.jpg', '0NK2SDAY.jpg', '0NP96EGY.jpg', '0O1LZWHQ.jpg', '0OFE6MSI.jpg', '0ON7E9RU.jpg', '0OS6ZK8X.jpg', '0PNDS7OG.jpg', '0QDIG4BK.jpg', '0QS21LZ5.jpg', '0QX8O4K5.jpg', '0R2P4H1I.jpg', '0R5836GQ.jpg', '0R5C4V7X.jpg', '0RAYEIFB.jpg', '0RBDE8G9.jpg', '0RNYOPL5.jpg', '0RPZ5WDL.jpg']
root D:\data\RMB_data\100
dirs []
files ['013MNV9B.jpg', '01953EH7.jpg', '01GUGTQ4.jpg', '0237YRPB.jpg', '027AXFQE.jpg', '02GMCEUY.jpg', '02OE5LH4.jpg', '02U7GMR4.jpg', '04PKGVRH.jpg', '04VA2NX7.jpg', '04W3GHSB.jpg', '04XUW3YA.jpg', '04Y816LH.jpg', '05CGTWNF.jpg', '05IDEW2M.jpg', '05NY9E4L.jpg', '062RVGPX.jpg', '069EUOGR.jpg', '06DCY1X7.jpg', '06NEIRC4.jpg', '06WXAH5B.jpg', '07C64BY2.jpg', '07EVDRNY.jpg', '07G9OTZ8.jpg', '07GG9EL5.jpg', '07UHGSGR.jpg', '0845ZXHV.jpg', '08FB4P92.jpg', '08KCVAP1.jpg', '094HN2DV.jpg', '0A4DSPGE.jpg', '0A8IHWYD.jpg', '0AGN4YMI.jpg', '0AXUR9N7.jpg', '0AYIPVK9.jpg', '0B4S7DIX.jpg', '0B6G4MGL.jpg', '0BEHP27M.jpg', '0BOVSMYN.jpg', '0BT9RL7V.jpg', '0E6MQZRX.jpg', '0F9X81GD.jpg', '0FBU7PYL.jpg', '0FGZ2O94.jpg', '0FI3Q5G6.jpg', '0FLQ2NM8.jpg', '0FVUA72W.jpg', '0GBP7VOD.jpg', '0GK7QWHV.jpg', '0GO4CF9X.jpg', '0H3XGENW.jpg', '0I18Y4DC.jpg', '0I376P29.jpg', '0ICF2DMA.jpg', '0IPRGGO8.jpg', '0IUO1B5C.jpg', '0K3UG2A7.jpg', '0K9UF7PZ.jpg', '0KR1M3IQ.jpg', '0KVUR7IY.jpg', '0L6X2HUZ.jpg', '0LIKD2CE.jpg', '0M2XL8TP.jpg', '0M9ELBI8.jpg', '0MEDOLBT.jpg', '0MEG4GXO.jpg', '0MLDWG4I.jpg', '0N6GK7DV.jpg', '0NOGYHMV.jpg', '0NR17KZY.jpg', '0NVG5T3I.jpg', '0NVLGX81.jpg', '0OMXR67T.jpg', '0OWAK5B7.jpg', '0P1HGRT2.jpg', '0P3IQFN1.jpg', '0P3LXCWK.jpg', '0PDHIO85.jpg', '0PGDL742.jpg', '0PLFQ4UI.jpg', '0PQXSWVG.jpg', '0QDUHBWO.jpg', '0R6X4SO8.jpg', '0S4TL8YH.jpg', '0TPMVXD2.jpg', '0TW2YELM.jpg', '0U47M9CX.jpg', '0UB46RM1.jpg', '0W462YMN.jpg', '0WLNF8AG.jpg', '0WLO5FN2.jpg', '0WMICN9B.jpg', '0WRGMZ5Y.jpg', '0WV65B8Z.jpg', '0X8MOP1K.jpg', '0YSHMFA2.jpg', '0YU1K84V.jpg', '0Z1DMA2S.jpg', '0Z85G1SR.jpg', '0ZA9M8E2.jpg']

2.1.4 filter()

filter()函数用于过滤序列,过滤掉不符合条件的元素,返回符合条件的元素组成新列表。

filter()语法如下:

filter(function,iterable)
 
# 其中function为函数,iterable为序列

序列中的每个元素作为参数传递给函数进行判断,返回True或者False,最后将返回True的元素放到新列表中。

 imgs = os.listdir(os.path.join(root, sub_dir))         
 imgs = list(filter(lambda x: x.endswith('.jpg'), imgs))

2.1.5 源代码:

# -*- coding: utf-8 -*-
"""
# @file name  : 1_split_dataset.py
# @author     : TingsongYu https://github.com/TingsongYu
# @date       : 2020-07-24 10:08:00
# @brief      : 将数据集划分为训练集,验证集,测试集
"""

import os
import random
import shutil
BASE_DIR = os.path.dirname(os.path.abspath(__file__))


def makedir(new_dir):
    if not os.path.exists(new_dir):
        os.makedirs(new_dir)


if __name__ == '__main__':

    dataset_dir = os.path.abspath(os.path.join(BASE_DIR, "..", "..", "data", "RMB_data"))
    split_dir = os.path.abspath(os.path.join(BASE_DIR, "..", "..", "data", "rmb_split"))
    train_dir = os.path.join(split_dir, "train")
    valid_dir = os.path.join(split_dir, "valid")
    test_dir = os.path.join(split_dir, "test")

    if not os.path.exists(dataset_dir):
        raise Exception("\n{} 不存在,请下载 02-01-数据-RMB_data.rar 放到\n{} 下,并解压即可".format(
            dataset_dir, os.path.dirname(dataset_dir)))

    train_pct = 0.8
    valid_pct = 0.1
    test_pct = 0.1

    for root, dirs, files in os.walk(dataset_dir):
        for sub_dir in dirs:

            imgs = os.listdir(os.path.join(root, sub_dir))
            imgs = list(filter(lambda x: x.endswith('.jpg'), imgs))
            random.shuffle(imgs)
            img_count = len(imgs)

            train_point = int(img_count * train_pct)
            valid_point = int(img_count * (train_pct + valid_pct))

            for i in range(img_count):
                if i < train_point:
                    out_dir = os.path.join(train_dir, sub_dir)
                elif i < valid_point:
                    out_dir = os.path.join(valid_dir, sub_dir)
                else:
                    out_dir = os.path.join(test_dir, sub_dir)

                makedir(out_dir)

                target_path = os.path.join(out_dir, imgs[i])
                src_path = os.path.join(dataset_dir, sub_dir, imgs[i])

                shutil.copy(src_path, target_path)

            print('Class:{}, train:{}, valid:{}, test:{}'.format(sub_dir, train_point, valid_point-train_point,
                                                                 img_count-valid_point))
            print("已在 {} 创建划分好的数据\n".format(out_dir))

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haimianjie2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值