一般情况下,在用数据集对神经网络进行训练之前我们要将其10等分,其中9份用于训练,1份用于测试,我们就可以进行随机抽取。
字符串的相关操作
以 f
或 F
开头的字符串,以 {}
包含的部分可以进行值替换。例如:
dst = "D:/out/some"
label = 3
dstpath = f"{dst}/{label}"
print(dstpath)
>>>D:/out/some/3
在字符串前加r可防止字符串转义,或者在反斜杠前加反斜杠,再或者使用正斜杠替代反斜杠也可。例如:
root = glob.glob("D:\out\some\cag\\3")
root = glob.glob(r"D:\out\some\cag\3")
root = glob.glob("D:/out/some/cag/3")
完整代码:
import os, random, shutil ,glob, tqdm
root = glob.glob(r"origin_root/*")
dst = "target_root"
for imgdirs in root:
imgdirs = imgdirs.replace("\\", "/")
files = os.listdir(imgdirs)
filenum = len(files)
label = imgdirs.split("/")[-1]
filesample = random.sample(files, filenum//10) # 随机从每个类别文件夹中选取1/10的图片
for filename in tqdm.tqdm(filesample):
dstpath = f"{dst}/{label}"
if not os.path.exists(dstpath):
os.makedirs(dstpath)
shutil.move(f"{imgdirs}/{filename}", f"{dstpath}/{filename}")
其中origin_root表示图片类别文件夹所在的路径,/*表示origin_root下所有的文件夹,root就是这些文件夹路径的列表,通过os.listdir()我们找到文件夹下的图片,随机抽取总数的1/10。target_root为目标路径。tqdm可以加上进度条。label为不同图片的标签,即类别。