Pytorch实现猫狗大战(二)

上一篇博客中,介绍了数据集的下载,现在开始下一个阶段,撸代码啦。
(注:发现github上一处可以数据,并且有代码,不过库函数更新的太快啦,有时候download的项目是不能直接跑起来的,所以我们需要进行微调。https://github.com/maples1993/Cats_vs_Dogs)
我们下载得到的数据集如下:Pytorch实现猫狗大战(二)_第1张图片
下载得到的数据,有2个压缩包,我们将他们进行解压,得到test1文件夹和train文件夹,
其中test1文件夹下
Pytorch实现猫狗大战(二)_第2张图片
既有猫也有狗的图片,图片的命名是有顺序阿拉伯数字。

在train文件夹下:
Pytorch实现猫狗大战(二)_第3张图片
Pytorch实现猫狗大战(二)_第4张图片
属于猫的类别图片命名:cat+数字
属于狗的类别图片命名:dog+数字

我们只需要train文件夹中的数据即可
首先,我们新建一个Dataset文件夹,将train中的图片都拷贝进去,
然后,再新建train和val文件夹,在这两个文件夹下,分别新建cat和dog文件夹
像这样的目录结构:
Pytorch实现猫狗大战(二)_第5张图片
编写数据分类代码:preprocess_data.py
其中90%的数据当做训练集,10%的数据当做测试集

# -*- coding: utf-8 -*-
import os
import shutil # 用来移动图片的库,直接移走

def preprocess_data():
    data_file = os.listdir('data/Dataset') # 读取所有图片的名字
    #print(len(data_file)) # 查看数据大小
    # 将图片名为cat和dog的图片分别取出来,存为两个list
    cat_file = list(filter(lambda x:x[:3]=='cat',data_file))
    dog_file = list(filter(lambda x:x[:3]=='dog',data_file))
    
    data_root = 'data/'
    train_root = 'data/train'
    val_root = 'data/val'
    
    for i in range(len(cat_file)):
        print(i)
        pic_path = data_root + 'Dataset/' + cat_file[i]
        if i < len(cat_file)*0.9:
            obj_path = train_root + '/cat/' + cat_file[i]
        else:
            obj_path = val_root + '/cat/' + cat_file[i]
        shutil.move(pic_path,obj_path)
        
    for j in range(len(dog_file)):
        print(j) # 查看进度
        pic_path = data_root + 'Dataset/' + dog_file[j]
        if j < len(dog_file)*0.9:
            obj_path = train_root + '/dog/' + dog_file[j]
        else:
            obj_path = val_root + '/dog/' + dog_file[j]
        shutil.move(pic_path,obj_path)
        

# 程序运行接口,调用函数
if __name__ == '__main__':
    preprocess_data()

运行程序
我们的train下的cat文件夹和dog文件夹
val下的cat文件夹和dog文件夹
就会移入相应的图片。
等项目结束,我会把所有代码放在Github上。
记录学习的过程,让知识共享。

你可能感兴趣的:(python,PyTorch,深度学习)