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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
狗大战是kaggle竞赛某一年的一道赛题,旨在通过给定的数据构建神经网络以区分狗和的图像。这个问题是一个二分类问题,需要我们对输入的图像进行分类处理。 要解决这个问题,我们可以首先对数据进行预处理。首先,我们需要读取图像数据,并将其转换为模型可以处理的向量表示。然后,我们可以对图像进行预处理,例如缩放和归一化,以便它们在训练过程中具有相似的特征表示。 接下来,我们可以构建一个神经网络模型。我们可以选择一种经典的卷积神经网络架构,例如VGGNet或ResNet。这些网络具有很好的特征提取能力,可以有效地区分图像中的不同特征。我们可以根据数据集的规模和复杂性选择合适的网络架构,并根据实验结果进行调整。 在模型构建之后,我们可以将数据集划分为训练集和验证集。训练集用于模型的训练过程,而验证集用于调整模型超参数和监测模型的性能。我们可以使用交叉熵损失函数来衡量模型在训练过程中的性能,并使用反向传播算法来更新模型的权重和偏置,以最小化损失函数。 训练过程可能需要多个epoch来使模型收敛。每个epoch期间,网络将通过一系列前向传播和反向传播的步骤进行训练和更新。同时,我们可以在训练过程中使用一些训练技巧,例如学习率衰减和数据增强,以提高模型的性能和泛化能力。 最后,我们可以使用验证集来评估模型的性能,并根据评估结果进行调整和改进。一旦我们满意模型的性能,我们就可以使用该模型对新的未标记图像进行分类,并将其输出为狗或。 总的来说,狗大战是一个通过构建神经网络来区分狗和图像的问题。通过数据预处理、模型构建、训练和验证,我们可以逐步提高模型的性能,最终得到一个准确、可靠的分类器。这一过程需要技术和创新的结合,也是解决图像分类问题的一种常见方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冲冲冲@chong

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

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

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

打赏作者

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

抵扣说明:

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

余额充值