猫狗大战----【Inter校企合作】

2024-03-20 14:30
文章标签 合作 大战 inter 校企

本文主要是介绍猫狗大战----【Inter校企合作】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、问题以及数据集

1.问题描述

         在这问题中,你将面一个典的机器学分类挑——猫狗大。你的任是建立一个分类模型,能够准确地区分像中是猫是狗

2.期解决方案:

你的目标是通过训练一个机器学习模型,使其在给定一张图像时能够准确地预测图像中是猫还是狗。模型应该能够推广到未见过的图像,并在测试数据上表现良好。期待您将其部署到模的生产环境中——里推理时间和二分类准确度(F1分数)将作为评分的主要依据

3.数据集

链接:百度网盘 请输入提取码 

提取码:jc34

二、数据集

1.数据集:

本实验数据集由test1和train两个文件组成

 其中train文件夹中分别有12500张cat图片,12500张dog图片

在test1文件夹中有25000张不知为cat或是dog的图片

2.查看图片:

三、解决方案 

1. 加载、查看 训练集/测试集

查看训练集/测试集大小:

#训练集
# 图片路径
train_path = './data/train' 
test_path = './data/test1'#获取所有图片文件名
train_files = os.listdir(train_path)
test_files = os.listdir(test_path)print("训练集大小为:{}".format(len(train_files)))
print("测试集大小为:{}".format(len(test_files)))

运行结果:

 2.处理数据

2.1训练集

        创建一个空的 pandas.DataFrame 对象 train_df,用于存储数据集的信息。

head() 方法打印输出 train_df 的前几行数据。

#构造数据集
image_paths = []
labels = []#循环遍历文件
for file in train_files:label = file.split('.')[0]labels.append(label)image_path = os.path.join(train_path,file)image_paths.append(image_path)train_df = pandas.DataFrame()#创建dataFrame
train_df['train_image_path'] = image_paths
train_df['label'] = labels
train_df.head()

运行结果:

2.2测试集

#测试集
image_paths = []
test_idx = []
for file in test_files:idx = file.split('.')[0]test_idx.append(idx)image_path = os.path.join(test_path,file)image_paths.append(image_path)test_df = pandas.DataFrame()
test_df['test_image_path'] = image_paths
test_df.head()

运行结果

3.分割训练集为数据集以及验证集

        使用 train_set['label'].hist() 和 val_set['label'].hist() 分别绘制训练集和验证集中各类标签的直方图。

#以下为分层抽样,随机抽样容易出现偏差
from sklearn.model_selection import train_test_split#更新Numpy
#!pip install numpy --upgrade#stratify参数被设置时,会按照标签的比例将数据集分为训练集和测试集
train_set,val_set = train_test_split(train_df,random_state = 42 , stratify = train_df['label'])print("训练集大小:{}".format(len(train_set)))
print("验证集大小:{}".format(len(val_set)))train_set['label'].hist()#此时样本是无偏的
val_set['label'].hist()

运行结果

4.数据增强

在这里使用 了Keras 的 ImageDataGenerator 类对训练集进行数据增强。

1.1训练集

        创建一个数据增强器 train_gen,其中包括了多种数据增强方法,例如缩放、旋转、剪切、翻转等。通过这些数据增强方法,可以生成更多的训练图像,增加模型的泛化能力。

#数据增强train_gen = ImageDataGenerator(zoom_range=0.1,rotation_range=10,rescale=1./255,shear_range=0.1,horizontal_flip=True,width_shift_range=0.1,height_shift_range=0.1
)train_generator = train_gen.flow_from_dataframe(dataframe=train_set,x_col='train_image_path',y_col='label',target_size=(200,200),class_mode='binary',batch_size=128,shuffle=False
)print(len(train_generator))

运行结果

1.2验证集

#验证集
val_gen = ImageDataGenerator(rescale=1./255
)
val_generator = val_gen.flow_from_dataframe(dataframe=val_set,x_col='train_image_path',#指定参数范围y_col='label',target_size=(200,200),class_mode='binary',#表示为二分类问题batch_size=128,#每批次生成128张图片shuffle=False#不对数据进行随机打乱
)
#打印验证集数据生成器长度
print(len(val_generator))

运行结果

1.3测试集

#测试集
test_datagen = ImageDataGenerator(rescale=1./255
)
test_generator = test_datagen.flow_from_dataframe(dataframe=test_df,x_col='test_image_path',y_col=None,target_size=(200,200),class_mode=None,batch_size=128,shuffle=False
)
print(len(test_generator))

运行结果

5.搭建模型

在这里使用 Keras 中的 VGG16 预训练模型搭建了一个卷积神经网络模型。

        对 VGG16 的所有层进行权重冻结,即不进行训练。这是因为预训练好的 VGG16 模型已经在大规模的数据集上进行了训练,具有较强的特征提取能力,我们只需要将其作为卷积部分来提取图像特征即可。

        向 model 中添加 VGG16 的卷积部分 vgg16,即将其作为第一层。由于 vgg16 的权重已经被冻结,因此在训练过程中不会更新它的权重。接着向 model 中添加一个展平层 Flatten(),将卷积层的输出展平成一维向量,方便全连接层处理。然后向 model 中添加一个具有 128 个神经元的全连接层 Dense(128, activation='relu'),使用 ReLU 激活函数。最后向 model 中添加一个具有 1 个神经元的输出层 Dense(1, activation='sigmoid'),使用 sigmoid 激活函数,用于进行二分类任务。

from keras.applications.vgg16 import VGG16
from keras.models import Sequential
from keras.layers import Flatten, Dense# 加载VGG16预训练模型,不包括顶部的全连接层
vgg16 = VGG16(weights='imagenet', include_top=False, input_shape=(200, 200, 3))# 冻结VGG16的权重,不进行训练
for layer in vgg16.layers:layer.trainable = False# 创建模型
model = Sequential()
#添加VGG16的卷积部分
model.add(vgg16)
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

6.设计优化器和损失函数

优化器为adam

损失函数为交叉熵损失binary_crossentropy

model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])model.summary()

运行结果

7.对模型进行10轮迭代训练

checkpoint_save_path = "./model/model_train.h5"print('------------------------load the model----------------------------')cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_save_path,save_weights_only=False,save_best_only=True
)# 对模型进行训练
history = model.fit(train_generator,epochs=10,batch_size=128,validation_data=val_generator,validation_freq=1,callbacks=[cp_callback],verbose=1
)

运行结果

会挑选acc结果最好的一次对训练模型进行保存

7.使用验证集预测并计算f1值

使用训练好的model来对验证集进行训练,并计算f1的值

# 加载保存的模型
loaded_model = tf.keras.models.load_model('./model/model_train.h5')# 生成验证集预测结果
pred = loaded_model.predict(val_generator,steps = len(val_generator))
predicted_classes = np.array([int(prediction[0] > 0.5) for prediction in pred])true_labels = val_generator.classes
# 计算f1-score
f1 = f1_score(true_labels, predicted_classes)
print("验证集f1-score为:{}".format(f1))

运行结果 

可以得到f1值为0.93左右 ,229秒完成预测

8.使用oneAPI加速

1.1 使用oneAPI组件对预测进行加速

在代码中,通过设置环境变量TF_ENABLE_ONEAPI = '1',将TensorFlow配置为使用oneAPI加速。然后,使用tf.device('/CPU:0')将推理操作指定在CPU上进行,以实现加速推理。

import tensorflow as tf
import osos.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'  # 防止显示不必要的警告信息# 设置TensorFlow为使用oneAPI加速
os.environ['TF_ENABLE_ONEAPI'] = '1'# 加载已训练好的模型
model = tf.keras.models.load_model('./model/model_train.h5')# 设置批量推理
batch_size = 128# 使用oneAPI加速推理
with tf.device('/CPU:0'):predictions = model.predict(val_generator, batch_size=batch_size)
# 将预测结果转换为类别标签
# 保存模型
model.save('./model/model_oneAPI.h5')predicted_classes = np.array([int(prediction > 0.5) for prediction in predictions])# 计算并输出 F1 分数
true_labels = val_generator.classes
f1 = f1_score(true_labels, predicted_classes)
print("F1 score:", f1)

运行结果 

169秒完成预测,f1值为0.93左右

1.2 使用oneAPI组件加速后的模型对测试集进行预测并计算f1值

from sklearn.metrics import f1_score
import numpy as np
import tensorflow as tf
# 加载保存的模型并进行预测
loaded_model = tf.keras.models.load_model('./model/oneAPI_model.h5')predictions = loaded_model.predict(test_generator, steps=len(test_generator))# 将预测结果转换为类别标签
predicted_classes = np.array([int(prediction > 0.5) for prediction in predictions])# 计算并输出 F1 分数
true_labels = test_generator.classes
f1 = f1_score(true_labels, predicted_classes)
print("F1 score:", f1)

运行结果

27秒得出预测结果,f1值提升至0.96,加速效果显著

四、总结

        该代码主要实现了一个基于VGG16模型的猫狗分类器。首先通过构造训练集和测试集,然后使用ImageDataGenerator进行数据增强,生成训练集数据生成器、验证集数据生成器和测试集数据生成器。然后加载预训练的VGG16模型,冻结其权重,添加全连接层,编译模型并进行训练。通过回调函数ModelCheckpoint保存每个epoch的最佳模型。接着对验证集进行预测,计算F1-score指标。最后使用oneAPI加速推理,对测试集进行预测,并计算F1-score指标。

这篇关于猫狗大战----【Inter校企合作】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/829755

相关文章

Ai+若依(智能售货机运营管理系统---帝可得)-人员管理-点位管理-区域管理-合作商管理----【08篇---0001:上】

项目介绍 售货机简介 帝可得是一个基于物联网概念下的智能售货机运营管理系统 物联网 物联网(IoT:Internet of Things)简单来说,就是让各种物品通过互联网连接起来,实现信息的交换和通信。 这个概念听起来可能有点抽象,但我们可以把它想象成一个超级大的社交网络。不过,这个网络里的成员不是人类,而是各种物品。比如,你的冰箱、洗衣机、甚至是你的汽车,它们都可以通过互联网互

蓝象智联与中国电子云签署战略合作,共建隐私计算基础设施-数据冷链

为落实国家数字中国建设战略,夯实数字中国建设基础,打通数字基础设施大动脉,畅通数据资源大循环,蓝象智联与中国电子云于9月4日在北京签署战略合作协议,共建隐私计算基础设施方案。 签约仪式上,在中国电子云董事长兼总裁陈士刚与蓝象智联董事长童玲的见证下,中国电子云副总裁、数据产品线总经理冯进与蓝象智联CTO朱坤签署战略合作协议。 根据协议,双方将发挥各自优势资源,进行联合创新,在数据基础设施、数据

Web开发基础:JavaScript飞机大战

超详细的Java知识点路线图 飞机大战 图片链接:https://pan.baidu.com/s/1elfvlHClwwDnc8buUnySPw 提取码:mi5y 功能点: 1、飞机跟着鼠标移动 在onmousemove事件中获得鼠标的坐标,设置给飞机图片 2、发射子弹 子弹需要动态添加到网页中 动态创建标签对象 document.createElement(“标签名”); 动态添加

中地数码集团、新中地教育校企联合GIS开发实践实训项目

中地数码集团是国内GIS软件开发与解决方案提供商头部企业,30年来深耕GIS行业,产业链遍布智慧地质、城市建设规划、国土资源管理等重点行业。新中地教育为首批长江学者、国家地理信息系统工程技术研究中心首席科学家、中地数码创始人吴信才教授、刘永教授创办的,隶属于中地数码集团,行业唯一专业从事GIS及软件开发人才培养的工作的大型职业教育企业。 新中地教育自2018年成立以来,通过校企合作、

十四、坦克大战(上)

文章目录 一、坦克大战游戏演示(略)二、java绘图坐标体系三、java绘图技术3.1 快速入门3.2 绘图原理Graphics类 四、java事件处理机制五、绘制坦克5.1 坦克抽象类、己方坦克、敌方坦克5.2 自定义面板5.3 绘图界面 一、坦克大战游戏演示(略) 二、java绘图坐标体系 三、java绘图技术 3.1 快速入门 package com.g

ChatGPT、Claude 和 Gemini 在数据分析方面的合作(第 3 部分):机器学习的最佳 AI 助手

人工智能如何加速你的机器学习项目从特征工程到模型训练 人工智能如何加速你的机器学习项目从特征工程到模型训练 欢迎来到雲闪世界。 在本文中,我们将重点介绍这些 AI 工具如何协助机器学习项目。机器学习是数据科学的基石。虽然使用 LLM 模型完全自动化建模过程具有挑战性,但这些 AI 工具仍然可以显著简化许多 ML 步骤的流程。 添加图片注释,不超过 140 字(可选) 构建机器学

无人机校企合作:组装、维修、研发全面提升学生技能方好就业

无人机校企合作在组装、维修、研发等方面全面提升学生技能,进而促进学生就业,是一个具有前瞻性和实践性的教育模式。以下是对该合作模式的详细分析: 一、合作背景与意义 随着无人机技术的快速发展和广泛应用,市场对无人机专业人才的需求日益增长。无人机校企合作模式通过整合学校的教育资源和企业的实践经验,共同培养具备组装、维修、研发等综合能力的高素质无人机技术人才,以满足市场需求,促进学生就业。

新能源车的补能大战:画饼越来越大,实现越来越难

转眼间2024年已经过半,上半年汽车行业的竞争中,纵然有一些车企表现出色,但结合目标完成度来看,车企们却普遍未能交出高分答卷,目标完成度普遍在30%左右,仅有比亚迪、长安、吉利等少部分车企目标完成度超过了40%。 当然,汽车销量存在季节性变化,下半年利用“金九银十”和春节前的购车高峰期冲击销量,车企仍有望实现目标。然而在另一项“考试”中,今年车企们却可能要以不及格收场。 在新能源汽车市

【软件文档】终止合同协议书、项目合作协议、交底纪要、管理台账(原件)

1、终止合同协议书 2、项目合作协议 3、合同交底纪要 4、合同管理台账 软件全套精华资料包清单部分文件列表: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书,技术解决方案,数据库设计说明书,详细设计说明书,单元测试报告,总体测试计划,单元测试计划,产品集成计划,集成测试报告,集成测试计划,系统测试报告,产

安全联盟宣布与浙江卫视正式签约合作

2013年12月23日,安全联盟正式对外公布消息称,已于浙江卫视签署正式合作协议,共同打击各类仿冒知名电视节目进行诈骗的非法网站,一起承担起保护网民权益、创建安全健康上网环境的社会责任。据悉,这是安全联盟与浙江卫视在联手打击仿冒《中国好声音》、《中国梦想秀》网站之后又一新动作,这预示着安全联盟将在今后继续为浙江卫视知名节目的正常播出保驾护航。     自浙江卫视《中国好声音》播出之后,各