以kaggle猫狗大战数据集为例
官网上下载下来的目录是这样的:
里面就是一些猫猫狗狗的图片混在一起,文件名就是它们的标签。
我们要实现的结构是这样的:
将小猫小狗分类放好,并且训练集和验证集各一部分。
方法:
通过文件名匹配的方式利用rename方法将图片所在文件夹改变。
代码:
path = 'D:\Pytorch\kaggle\input\dogsvscats'
#读文件夹内的所有内容
files =glob.glob(os.path.join(path,'*\*.jpg'))#直接glob不太行
print(f'Total no of images {len(files)}')
no_of_images = len(files)
#创建可用于创建验证数据集的混合索引
shuffle = np.random.permutation(no_of_images)#随即返回一个序列
os.mkdir(os.path.join(path,'valid'))
#使用标创建目录
for t in ['train','valid']:
for folder in ['dog\\','cat\\']:
os.mkdir(os.path.join(path,t,folder))
#将图片的一小部分子集复制到validation文件夹
for i in shuffle[:2000]:
folder = files[i].split('\\')[-1].split('.')[0]#按str分割num+1次,-1代表分割所有
image = files[i].split('\\')[-1]
os.rename(files[i],os.path.join(path,'valid',folder,image))#rename这个方法用得不对
for i in shuffle[2000:]:
folder = files[i].split('\\')[-1].split('.')[0]#按str分割num+1次,-1代表分割所有
image = files[i].split('\\')[-1]
os.rename(files[i],os.path.join(path,'train',folder,image))