cats-and-dogs 猫狗识别,自己分割数据为训练集和测试集,并利用Tensorflow进行模型构建并预测自己准备的数据

注:本文应用Tensorflow2.9.1,python3.10

若原始数据集为dogs,和cats 两个文件夹,可进行自动划分数据集为训练集train_data(子文件cats,dogs),测试集test_data(子文件cats,dogs)

分割数据集用到的库shutil,random,os

--shutil: 模块提供了一系列对文件和文件集合的高阶操作。 特别是提供了一些支持文件拷贝和删除的函数。

--shutil.copyfile(src,dst)  将源目录中的文件拷贝到路径dst下,dst 必须是完整的目标文件名,如果 dst 已经存在,它将被替换

--shutil.rmtree(path)  删除指定的path目录

--os.mkdir(path)  创建一个名为path的目录

--os.makedirs(path)  递归创建目录path ,会自动创建到达最后一级的中间目录

--os.listdir(path)返回一个包含由 path 指定目录中条目名称组成的列表。 该列表按任意顺序排列,并且不包括特殊条目 '.' 和 '..'

random.sample(population,k)  返回从总体序列或集合中选择的唯一元素的 k 长度列表。 用于无重复的随机抽样。

1 查看源数据,数据下载可参考【http://t.csdn.cn/8XWRZ】,若下载的数据已经被划分为训练集和测试集,想要自己划分的话可自己合并各个类别的所有数据然后自己划分。

  查看cats 和dogs 分别有多少张图片

import os
print(len(os.listdir('E:/machine learning data/cats-dogs-images/cats'))) #查看cats数据一共有多少张图片
print(len(os.listdir('E:/machine learning data/cats-dogs-images/dogs')))

 2 创建文件夹存放训练集和测试集

try:
    os.mkdir('E:/machine learning data/cat-dog') #在路径'E:/machine learning data/'下创建文件名为cat-dog的文件
    os.mkdir('E:/machine learning data/cat-dog/training')
    os.mkdir('E:/machine learning data/cat-dog/testing')
    os.mkdir('E:/machine learning data/cat-dog/training/cats')
    os.mkdir('E:/machine learning data/cat-dog/training/dogs')
    os.mkdir('E:/machine learning data/cat-dog/testing/cats')
    os.mkdir('E:/machine learning data/cat-dog/testing/dogs')
except OSError:
    pass  

3 分割数据

#分割原始数据为训练集和测试集
import shutil
import random
def split_data(source,training,testing,split_size): #参数分别为cats或者dogs源目录,训练集目录,测试集目录,划分比例
    files=[] #临时列表容器存放遍历的文件名
    for filename in os.listdir(source): #将遍历的非空文件追加到files
        file=source+filename
        if os.path.getsize(file)>0:
            files.append(filename)
        else:
            print(filename+'is zero,so ingoring')
    training_length=int(len(files)*split_size)
    testing_length=int(len(files)-training_length)
    shuffled_set=random.sample(files,len(files))   #返回随机采样的长度为len(files)的列表
    trainging_set=shuffled_set[0:training_length]  #随机选取training_length张图片为训练集
    testing_set=shuffled_set[-testing_length:]
    
    for filename in trainging_set:
        this_file=source+filename
        destination=training+filename
        shutil.copyfile(this_file,destination)  #copyfile(src,dst),dst必须是完整的目标文件名,从src复制到dst;copy(src,dst),dst可以为目录名
    
    for filename in testing_set:
        this_file=source+filename
        destination=testing+filename
        shutil.copyfile(this_file,destination)
cat_source_dir='E:/machine learning data/cats-dogs-images/cats/'  #cats数据源目录
training_cats_dir='E:/machine learning data/cat-dog/training/cats/'
testing_cats_dir='E:/machine learning data/cat-dog/testing/cats/'
dog_source_dir='E:/machine learning data/cats-dogs-images/dogs/'  #dogs数据源目录
training_dogs_dir='E:/machine learning data/cat-dog/training/dogs/'
testing_dogs_dir='E:/machine learning data/cat-dog/testing/dogs/'

#确认前面是否建立了训练集和测试集的子目录
def create_dir(file_dir):
    if os.path.exists(file_dir):
        print('true')
        shutil.rmtree(file_dir)#删除目录
        #os.makedirs(file_dir)#重建目录,makedirs自动创建到达最后一级目录所需要的中间目录
        os.mkdir(file_dir)
    else:
        os.mkdir(file_dir)
create_dir(training_cats_dir)
create_dir(testing_cats_dir)
create_dir(training_dogs_dir)
create_dir(testing_dogs_dir)

split_size=0.9
split_data(cat_source_dir,training_cats_dir,testing_cats_dir,split_size)  #开始分割cats数据集
split_data(dog_source_dir,training_dogs_dir,testing_dogs_dir,split_size)  #开始分割dogs数据集

4 查看分割后的数据

#查看分割后的数据
import numpy as np
from PIL import Image
print(len(os.listdir(training_cats_dir)))
print(len(os.listdir(testing_cats_dir)))
print(len(os.listdir(training_dogs_dir)))
print(len(os.listdir(testing_dogs_dir)))
img=Image.open("E:/machine learning data/cat-dog/training/cats/0.1.jpeg") #打开一张图片看其大小
print(img.size)

5 模型构建及预测可参考【 http://t.csdn.cn/DI4a4】和【http://t.csdn.cn/9BOXR

这是作者的学习笔记,在此分享,仅供参考。因为作者水平有限,如有疏漏之处,还望批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冲冲冲@chong

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

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

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

打赏作者

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

抵扣说明:

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

余额充值