1 作业简介
1.1问题描述
Cats vs. Dogs(猫狗大战)是一道经典赛题,利用给定的包含猫、狗图片的数据集,用算法实现猫和狗的识别(二分类)。在这个问题中,你将面临一个经典的机器学习分类挑战——猫狗大战。你的任务是建立一个分类模型,能够准确地区分图猫狗大战
你的目标是通过训练一个机器学习模型,使其在给定一张图像时能够准确地预测图像中是猫还是狗。模型应该能够推广到未见过的图像,并在测试数据上表现良好。将其部署到模拟的生产环境中——这里推理时间和二分类准确度(F1分数)将作为评分的主要依据。
1.2 数据集及图像展示
数据集的划分:
训练集(TRAIN):顾名思义指的是用于训练的样本集合,主要用来训练神经网络中的参数。
验证集(VAL):从字面意思理解即为用于验证模型性能的样本集合.不同神经网络在训练集上训练结束后,通过验证集来比较判断各个模型的性能.这里的不同模型主要是指对应不同超参数的神经网络,也可以指完全不同结构的神经网络。
测试集(TEST):对于训练完成的神经网络,测试集用于客观的评价神经网络的性能。
所用数据集:
链接:百度网盘 请输入提取码
提取码:jc34
部分数据集图像展示:
猫:
狗:
2 数据预处理
2.1 数据集结构
本项目数据集共由三部分组成,分别包含为TRAIN,TEST,VAL文件夹。
每个文件夹下有两个子文件夹,分别为CTAS和DOGS子文件夹。
其中, CATS子文件夹下包含了猫的图像。
DOGS子文件夹下包含了狗的图像
2.2探索性数据分析
分别取TRAIN数据集下的随机不重样3个猫,3个狗的图像进行展示。
import cv2
train_dir = 'wyj/TRAIN' # 图片路径
# 猫和狗的路径
cat_imgs = [fn for fn in os.listdir(f'{train_dir}/CATS') if fn.endswith('.jpeg')]
dog_imgs = [fn for fn in os.listdir(f'{train_dir}/DOGS') if fn.endswith('.jpeg')]
print(f'猫的数量为: {len(cat_imgs)}')
print(f'狗的数量为: {len(dog_imgs)}')
# 随机不重样的抽选3个猫,3个狗
select_CATS = np.random.choice(cat_imgs, 3, replace = False)
select_DOGS = np.random.choice(dog_imgs, 3, replace = False)
# 使用pit打印出来
fig = plt.figure(figsize = (20,10))
for i in range