Python 生成训练集的数据格式

简介

一般我们在用深度学习进行训练时,首先就是把数据处理成我们想要的格式,一些分类网络的图片训练格式一般都是train.txt 里面保存这图片的路径,以及对应的label。本篇博客就来介绍一下如何用python 来生成相应的txt文件。

1,准备数据

首先我们要有一个数据集,这里以market1501数据集为例,该数据集是行人重识别(reid)的主流数据集,该数据集的格式如下所示:
在这里插入图片描述
前面四位数都是表示同一类,后面的其实无所谓,每个字段都是用“_"来分开,所以我们要把它生成这样的格式:
/path/ro/your/market1501/bounding_box_train/0002_c1s1_000451_03.jpg 0
前面是图片的路径,后面是该图对应的标签。

2 python 代码

import os
import sys
train_path = "/path/to/your/market1501/bounding_box_train"
# 返回每个图片的路径
def file_name(file_dir):
    L=[]
    for root, dirs, files in os.walk(file_dir):
        for file in files:
            if os.path.splitext(file)[1] == '.jpg' or os.path.splitext(file)[1] == '.JPG' or os.path.splitext(file)[1] == '.JPEG' or os.path.splitext(file)[1] == '.jpeg'or os.path.splitext(file)[1] == '.png':
                fpath=os.path.join(root, file)
                L.append(fpath)
    return L
label_dic={}

def main():
    #打开一个txt文件,用来保存生成的图片路径和相应的label
    list_file_train = open("./train_reid.txt", 'w')
    #label必须是从0开始,不然会报错!
    labelidx=0
    files=file_name(train_path)
    allrecoder=[]
    for file in files:
        alls=file.split('/')
        #获取图片的名字
        name=alls[-1]
        #用”_“作为分隔符,得到前面的0002
        name=name.split('_')
        labn=name[0]
        #放到字典里作为key
        ret=label_dic.get(labn)
        label=None
        #生成相应的标签
        if(ret==None):
            label_dic[labn]=labelidx
            label=labelidx
            labelidx = labelidx+1
        else:
            #find label index at ret
            label=ret
        #把图片的路径以及标签存放在一个列表中
        recode=file+" "+str(label)
        allrecoder.append(recode)
    flen=len(allrecoder)
    indices = np.arange(flen)
    #随机重新进行排列
    np.random.shuffle(indices)
    for idx in range(flen):
        flen=flen-1
        print(flen)
       #把字符串写到list_file_train打开的文件中
        list_file_train.write(allrecoder[indices[idx]]+"\n")
    list_file_train.close()
 
    print("finished!",label_dic)
main()

上述代码便是把数据集生成训练格式的方法。

(1)Age:员工年龄 (2)Attrition:员工是否已经离职,1表示已经离职,2表示未离职,这是目标预测值; (3)BusinessTravel:商务差旅频率,Non-Travel表示不出差,Travel_Rarely表示不经常出差,Travel_Frequently表示经常出差; (4)Department:员工所在部门,Sales表示销售部,Research & Development表示研发部,Human Resources表示人力资源部; (5)DistanceFromHome:公司跟家庭住址的距离,从1到29,1表示最近,29表示最远; (6)Education:员工的教育程度,从1到5,5表示教育程度最高; (7)EducationField:员工所学习的专业领域,Life Sciences表示生命科学,Medical表示医疗,Marketing表示市场营销,Technical Degree表示技术学位,Human Resources表示人力资源,Other表示其他; (8)EmployeeNumber:员工号码; (9)EnvironmentSatisfaction:员工对于工作环境的满意程度,从1到4,1的满意程度最低,4的满意程度最高; (10)Gender:员工性别,Male表示男性,Female表示女性; (11)JobInvolvement:员工工作投入度,从1到4,1为投入度最低,4为投入度最高; (12)JobLevel:职业级别,从1到5,1为最低级别,5为最高级别; (13)JobRole:工作角色:Sales Executive是销售主管,Research Scientist是科学研究员,Laboratory Technician实验室技术员,Manufacturing Director是制造总监,Healthcare Representative是医疗代表,Manager是经理,Sales Representative是销售代表,Research Director是研究总监,Human Resources是人力资源; (14)JobSatisfaction:工作满意度,从1到4,1代表满意程度最低,4代表满意程度最高; (15)MaritalStatus:员工婚姻状况,Single代表单身,Married代表已婚,Divorced代表离婚; (16)MonthlyIncome:员工月收入,范围在1009到19999之间; (17)NumCompaniesWorked:员工曾经工作过的公司数; (18)Over18:年龄是否超过18岁; (19)OverTime:是否加班,Yes表示加班,No表示不加班; (20)PercentSalaryHike:工资提高的百分比; (21)PerformanceRating:绩效评估; (22)RelationshipSatisfaction:关系满意度,从1到4,1表示满意度最低,4表示满意度最高; (23)StandardHours:标准工时; (24)StockOptionLevel:股票期权水平; (25)TotalWorkingYears:总工龄; (26)TrainingTimesLastYear:上一年的培训时长,从0到6,0表示没有培训,6表示培训时间最长; (27)WorkLifeBalance:工作与生活平衡程度,从1到4,1表示平衡程度最低,4表示平衡程度最高; (28)YearsAtCompany:在目前公司工作年数; (29)YearsInCurrentRole:在目前工作职责的工作年数 (30)YearsSinceLastPromotion:距离上次升职时长 (31)YearsWithCurrManager:跟目前的管理者共事年数;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值