深度学习-卷积神经网络-基于VGG16模型, 实现猫狗二分类(文末附带数据集下载链接, 长期有效)
简介:
1.基于VGG16模型进行特征提取, 结合mlp实现猫狗二分类
2.训练数据--"dog_cat_class\training_set"
3.模型训练流程
1.对图像数据进行导入和预处理
2.搭建模型, 导入VGG16模型, 去除mlp层, 将经过VGG16训练后的数据作为输入, 输入到自建的mlp层中进行训练,
要求:
hidden layers=1, units=10, activation=relu
out layer:units=1, activation=sigmoid
3.对模型进行评估和预测
4.随机下载百度的12张猫/狗的图片, 对模型进行实战测试
4.代码实现(推荐直接看第二个, 比较规范)
4.1, 小垃圾写的(我写的)
# ============================================================
# 1.数据集导入, 单张图片导入, 可以通过load_image导入
from keras.preprocessing.image import load_img, img_to_array
img_path=r"C:\Users\鹰\Desktop\ML_Set\dog_cat_class\training_set\dogs\dog.1.jpg"
img_data=load_img(img_path, target_size=(224,224))
img_data=img_to_array(img_data)
# print(img_data.shape)
# type(img_data)# 2.模型搭建和模型训练
# 对图像增加一个维度, 然后通过图像预处理, 成为合格的图像输入格式,
from keras.applications.vgg16 import preprocess_input
import numpy as np
x_train=np.expand_dims(img_data, axis=0) # 这里最好换一个名字, 如果接受变量还是img_data的话, 当再一次执行这个代码单元, 会增加数组的维度
x_train=preprocess_input(x_train)
# print(x_train.shape)
# 将合格的图片数据输入到VGG16模型中
from keras.applications.vgg16 import VGG16
extract_model=VGG16(include_top=False, weights='imagenet')
img_features=extract_model.predict(x_train)
print(img_features.shape)# 实现对图片的批量读入
import numpy as npfrom keras.applications.vgg16 import VGG16
vgg=VGG16(include_top=False, weights='imagenet')from keras.preprocessing.image import load_img, img_to_array
from keras.applications.vgg16 import preprocess_input
def model_prepro(model, img_path):img_data=load_img(img_path, target_size=(224,224))img_array=img_to_array(img_data)x_train=np.expand_dims(img_array, axis=0)x_train=preprocess_input(x_train)x_vgg=model.predict(x_train)x_vgg=x_vgg.reshape(1, 25088)return x_vggimport os
# file_path=r"C:\Users\鹰\Desktop\ML_Set\dog_cat_class\training_set\"+sub_file
file_path1=r"C:\Users\鹰\Desktop\ML_Set\dog_cat_class\training_set\cat"
img_name_list = os.listdir(file_path1)img_list=[]
for i in img_name_list:if os.path.splitext(i)[1]=='.jpg': img_list.append(i)
img_path_list=[os.path.join(file_path1, i) for i in img_list]
img_feature_array1=np.zeros([len(img_path_list), 25088])
for i in range(len(img_path_list)):img_feature=model_prepro(vgg, img_path_list[i])img_feature_array1[i]=img_feature# 显示正在处理的图片print("preprecessing is"+img_list[i])#####################################################
file_path2=r"C:\Users\鹰\Desktop\ML_Set\dog_cat_class\training_set\dog"
img_name_list = os.listdir(file_path2)img_list=[]
for i in img_name_list:if os.path.splitext(i)[1]=='.jpg': img_list.append(i)
img_path_list=[os.path.join(file_path2, i) for i in img_list]
img_feature_array2=np.zeros([len(img_path_list), 25088])
for i in range(len(img_path_list)):img_feature=model_prepro(vgg, img_path_list[i])img_feature_array2[i]=img_feature# 显示正在处理的图片print("preprecessing is"+img_list[i])print(img_feature_array1.shape, img_feature_array2.shape)
y1=np.zeros(600)
y2=np.ones(602)
x_all=np.concatenate((img_feature_array1, img_feature_array2), axis=0)
y_all=np.concatenate((y1, y2), axis=0)
y_all=y_all.reshape(-1,1)
print(x_all.shape, y_all.shape)
# 分割数据集
from sklearn.model_selection import train_test_split
x_train, x_test,y_train, y_test = train_test_split(x_all, y_all, test_size=0.3, random_state=10)
print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)# MLP模型搭建和训练
from keras.models import Sequential
vgg_model=Sequential()
from keras.layers import Dense
vgg_model.add(Dense(units=10, input_dim=25088, activation='relu'))
vgg_model.add(Dense(units=1, activation='sigmoid'))
vgg_model.compile(optimizer='adam', metrics=['accuracy'], loss='binary_crossentropy')
vgg_model.fit(x_train, y_train, epochs=50)
vgg_model.summary()# ==========================================================================
# 训练集预测
y_train_predict=vgg_model.predict(x_train)
y_train_predict=np.argmax(y_train_predict, axis=1)
print(y_train_predict.shape)
# 计算train准确率
from sklearn.metrics import accuracy_score
accuracy_score=accuracy_score(y_train, y_train_predict)
print("accuracy is ", accuracy_score)# 测试集预测
y_test_predict=vgg_model.predict(x_test)
y_test_predict=np.argmax(y_test_predict, axis=1)
print(y_test_predict.shape)
# 计算test准确率
from sklearn.metrics import accuracy_score
accuracy_score=accuracy_score(y_test, y_test_predict)
print("accuracy is ", accuracy_score)# ====================================================================
# 在网上下载图片, 进行随机测试
from keras.preprocessing.image import load_img, img_to_array
pic_animal=r"C:\Users\鹰\Desktop\Dog+Cat\11.jpg"
pic_animal=load_img(pic_animal, target_size=(224,224))
pic_animal=img_to_array(pic_animal)
x_train=np.expand_dims(pic_animal, axis=0)
x_train=preprocess_input(x_train)
# 特征提取
features=vgg.predict(x_train)
x=features.reshape(1, -1)
print(x.shape)
print(features.shape)
y_predict=vgg_model.predict(x)
import numpy as np
y_predict=np.argmax(y_predict, axis=1)
print("result is :", y_predict)
# 结果为0--猫, 结果为1--狗
结果是...
4.2: 千问大模型修改后的
import numpy as np
from keras.preprocessing.image import load_img, img_to_array
from keras.applications.vgg16 import preprocess_input, VGG16
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Dense
from sklearn.metrics import accuracy_score
import os# 1. 数据集导入, 单张图片导入, 可以通过load_image导入
img_path = r"C:\Users\鹰\Desktop\ML_Set\dog_cat_class\training_set\dogs\dog.1.jpg"
img_data = load_img(img_path, target_size=(224, 224))
img_data = img_to_array(img_data)
print("Single image shape:", img_data.shape)# 2. 模型搭建和模型训练
def model_prepro(model, img_path):img_data = load_img(img_path, target_size=(224, 224))img_array = img_to_array(img_data)x_train = np.expand_dims(img_array, axis=0)x_train = preprocess_input(x_train)x_vgg = model.predict(x_train)x_vgg = x_vgg.reshape(1, -1)return x_vgg# 加载 VGG16 模型
vgg = VGG16(include_top=False, weights='imagenet')# 处理 cat 文件夹
file_path1 = r"C:\Users\鹰\Desktop\ML_Set\dog_cat_class\training_set\cat"
img_name_list = os.listdir(file_path1)
img_list = [i for i in img_name_list if os.path.splitext(i)[1].lower() == '.jpg']
img_path_list = [os.path.join(file_path1, i) for i in img_list]
img_feature_array1 = np.zeros([len(img_path_list), 25088])
for i in range(len(img_path_list)):img_feature = model_prepro(vgg, img_path_list[i])img_feature_array1[i] = img_featureprint(f"Processing: {img_list[i]} (Cat)")# 处理 dog 文件夹
file_path2 = r"C:\Users\鹰\Desktop\ML_Set\dog_cat_class\training_set\dog"
img_name_list = os.listdir(file_path2)
img_list = [i for i in img_name_list if os.path.splitext(i)[1].lower() == '.jpg']
img_path_list = [os.path.join(file_path2, i) for i in img_list]
img_feature_array2 = np.zeros([len(img_path_list), 25088])
for i in range(len(img_path_list)):img_feature = model_prepro(vgg, img_path_list[i])img_feature_array2[i] = img_featureprint(f"Processing: {img_list[i]} (Dog)")print("Feature array shapes:", img_feature_array1.shape, img_feature_array2.shape)# 创建标签
y1 = np.zeros(len(img_feature_array1))
y2 = np.ones(len(img_feature_array2))# 合并特征和标签
x_all = np.concatenate((img_feature_array1, img_feature_array2), axis=0)
y_all = np.concatenate((y1, y2), axis=0)
y_all = y_all.reshape(-1, 1)
print("Combined data shapes:", x_all.shape, y_all.shape)# 分割数据集
x_train, x_test, y_train, y_test = train_test_split(x_all, y_all, test_size=0.3, random_state=10)
print("Data split shapes:", x_train.shape, x_test.shape, y_train.shape, y_test.shape)# MLP模型搭建和训练
vgg_model = Sequential()
vgg_model.add(Dense(units=128, input_dim=25088, activation='relu'))
vgg_model.add(Dense(units=64, activation='relu'))
vgg_model.add(Dense(units=1, activation='sigmoid'))
vgg_model.compile(optimizer='adam', metrics=['accuracy'], loss='binary_crossentropy')
vgg_model.fit(x_train, y_train, epochs=100, batch_size=32, validation_data=(x_test, y_test))
vgg_model.summary()# 训练集预测
y_train_predict = vgg_model.predict(x_train)
y_train_predict = (y_train_predict > 0.5).astype(int) # 使用阈值 0.5 进行二分类
print("Train prediction shape:", y_train_predict.shape)# 计算train准确率
train_accuracy = accuracy_score(y_train, y_train_predict)
print("Train accuracy is:", train_accuracy)# 测试集预测
y_test_predict = vgg_model.predict(x_test)
y_test_predict = (y_test_predict > 0.5).astype(int) # 使用阈值 0.5 进行二分类
print("Test prediction shape:", y_test_predict.shape)# 计算test准确率
test_accuracy = accuracy_score(y_test, y_test_predict)
print("Test accuracy is:", test_accuracy)# 在网上下载图片, 进行随机测试
pic_animal = r"C:\Users\鹰\Desktop\Dog+Cat\11.jpg"
pic_animal = load_img(pic_animal, target_size=(224, 224))
pic_animal = img_to_array(pic_animal)
x_train = np.expand_dims(pic_animal, axis=0)
x_train = preprocess_input(x_train)# 特征提取
features = vgg.predict(x_train)
x = features.reshape(1, -1)
print("Feature shape:", x.shape)
print("Feature shape before reshape:", features.shape)# 预测
y_predict = vgg_model.predict(x)
y_predict = (y_predict > 0.5).astype(int) # 使用阈值 0.5 进行二分类
print("Prediction result is:", "猫" if y_predict[0][0] == 0 else "狗")
结果是...
这对我的心灵的伤害是百分百的暴击, 我的是反面教材........
想要看正版规范代码, 就看第二个, 当然,
如果觉得50%的成功率还行的话, 那我的勉强也能看
兄弟们不嫌弃的话, 也可以看看, 吸取一下经验教训, 看个乐子
5.扩展
扩展1:
keras.models 模块中的主要组成部分:
1.Sequential 模型是一种线性堆叠的层结构,适用于大多数简单的神经网络
2.Functional API 是一种更灵活的模型构建方式,允许创建复杂的非线性拓扑结构
扩展2:
keras.applications 导入 VGG16 时,你可以得到以下主要部分:
VGG16 Model: 这是整个 VGG16 网络模型,可以直接用来进行预测或者作为迁移学习的基础。
Preprocess Input: 一个函数,用于对输入图像数据进行预处理,以便与 VGG16 模型兼容。实现:from keras.applications.vgg16 import preprocess_input。
Decode Predictions: 一个函数,用于将 VGG16 模型的输出转换为人类可读的标签。实现:from keras.applications.vgg16 import decode_predictions。
Weights: 预训练的权重文件。这些权重是在 ImageNet 数据集上训练得到的,可以帮助你在自己的任务上快速获得较好的性能。
6.数据集链接:
官网:
Cat and Dog | KaggleCats and Dogs dataset to train a DL modelhttps://www.kaggle.com/datasets/tongpython/cat-and-dog?resource=download
百度网盘分享:
链接:https://pan.baidu.com/s/1T1mymwIqOOF3MKfWxRtnpQ
提取码:6axn
相关文章:
深度学习-卷积神经网络-基于VGG16模型, 实现猫狗二分类(文末附带数据集下载链接, 长期有效)
简介: 1.基于VGG16模型进行特征提取, 结合mlp实现猫狗二分类 2.训练数据--"dog_cat_class\training_set" 3.模型训练流程 1.对图像数据进行导入和预处理 2.搭建模型, 导入VGG16模型, 去除mlp层, 将经过VGG16训练后的数据作为输入, 输入到自建的mlp层中进行训练, 要…...
计算Java集合占用的空间【详解】
以ArrayList为例,假设集合元素类型是Person类型,假设集合容量为10,目前有两个person对象{name:“Jack”,age12} {name:“Tom”,age14} public class Person{private String name;private int age; }估算Person对象占用的大小: 对…...
仕考网:关于中级经济师考试的介绍
中级经济师考试是一种职称考试,每年举办一次,报名时间在7-8月,考试时间在10-11月 报名入口:中guo人事考试网 报名条件: 1.高中毕业并取得初级经济专业技术资格,从事相关专业工作满10年; 2.具备大学专科…...
SYN590RL 300MHz至450MHz ASK接收机芯片IC
一般描述 SYN590RL是赛诺克全新开发设计的一款宽电压范围,低功耗,高性能,无需外置AGC电容,灵敏度达到典型-110dBm,300MHz”450MHz 频率范围应用的单芯片ASK或OOK射频接收器。 SYN59ORL是一款典型的即插即用型单片高集成度无线接收器&…...
15分钟学 Go 第 20 天:Go的错误处理
第20天:Go的错误处理 目标 学习如何处理错误,以确保Go程序的健壮性和可维护性。 1. 错误处理的重要性 在开发中,错误处理至关重要。程序在运行时可能会出现各种问题,例如文件未找到、网络连接失败等。正确的错误处理能帮助我们…...
C++——string的模拟实现(上)
目录 引言 成员变量 1.基本框架 成员函数 1.构造函数和析构函数 2.拷贝构造函数 3.容量操作函数 3.1 有效长度和容量大小 3.2 容量操作 3.3 访问操作 (1)operator[]函数 (2)iterator迭代器 3.4 修改操作 (1)push_back()和append() (2)operator函数 引言 在 C—…...
JavaCV 之均值滤波:图像降噪与模糊的权衡之道
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
桥接模式,外界与主机通,与虚拟机不通
一 二 在此选择Windows与外界连接的网卡,通过有线连就选有线网卡,通过无线连就选无线网卡。 三 如果需要设置固定IP,则选择"Manual"进行设置。我这边根据实际需要,走无线的时候用DHCP,走有线的时候设固定IP…...
用HTML构建酷炫的文件上传下载界面
1. 基础HTML结构 首先,我们构建一个基本的HTML结构,包括一个表单用于文件上传,以及一个列表用于展示已上传文件: HTML <!DOCTYPE html> <html> <head><title>酷炫文件上传下载</title><link …...
Gateway 统一网关
一、初识 Gateway 1. 为什么需要网关 我们所有的服务可以让任何请求访问,但有些业务不是对外公开的,这就需要用网关来统一替我们筛选请求,它就像是房间的一道门,想进入房间就必须经过门。而请求想要访问微服务,就必须…...
7 种常见的前端攻击
大家都知道,保证网站的安全是十分重要的,一旦网站被攻陷,就有可能造成用户的经济损失,隐私泄露,网站功能被破坏,或者是传播恶意病毒等重大危害。所以下面我们就来讲讲7 种常见的前端攻击。 1. 跨站脚本 (X…...
element plus实现点击上传于链接上传并且回显到upload组件中
摘要: 今天遇到一个问题:vue3使用elemnt plus的上传图片时,数据是从别人的系统导出来的商品,图片是http的形式的,并且商品很多的,一个一个下载下来再上传很麻烦的,所以本系统插件商品时图片使用…...
ELK日志分析系统部署
ELK日志分析系统 ELK指的是ElasticsearchLogstashKibana这种架构的缩写。 ELK是一种日志分析平台,在很早之前我们经常使用Shell三剑客(一般泛指grep、sed、awk)来进行日志分析,这种方式虽然也可以应对多种场景,但是当…...
驾校小程序:一站式学车解决方案的设计与实践
一、引言 随着移动互联网技术的飞速发展,人们的生活方式和消费习惯正在发生深刻变化。驾校作为传统的服务行业,也面临着数字化转型的迫切需求。驾校小程序作为一种轻量级的应用,能够为用户提供便捷、丰富的学车服务,成…...
【自然语言处理】BERT模型
BERT:Bidirectional Encoder Representations from Transformers BERT 是 Google 于 2018 年提出的 自然语言处理(NLP)模型,它基于 Transformer 架构的 Encoder 部分。BERT 的出现极大提升了 NLP 任务的性能,如问答系…...
Android 添加如下飞行模式(飞行模式开和关、飞行模式开关菜单显示隐藏)接口
请添加如下飞行模式(飞行模式开关、飞行模式开关显示隐藏)接口: 飞行模式飞行模式开关com.action.airplankey: enable value:boolean true open the airplan false close the airplan关闭Intent intent = new Intent(); intent.setAction("com.action.airplan");…...
【Vue3】基于 Vue3 + ECharts 实现北京市区域地图可视化
文章目录 基于 Vue3 ECharts 实现北京市区域地图可视化1、引言2、项目初始化2.1、环境搭建2.2 、安装依赖2.3、项目结构 3、地图数据准备3.1、地图 JSON 文件获取(具体的json数据) 4、 组件开发4.1、Map 组件的设计思路4.2、基础结构实现4.3、核心数据结…...
【IC】什么是min period check
在 Synopsys Primetime 工具中可以检查.lib 文件中时钟输入的最小周期。想象这样一个场景,有一个设计 A,它有一个名为 clk 的时钟,并且该设计的 clk 周期被设定为一个值,比如 2 纳秒,即 500MHz。假设我们在进行静态时序…...
MyBatis入门之一对多关联关系(示例)
【图书介绍】《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》-CSDN博客 《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》(杨章伟,刘祥淼)【摘要 书评 试读】- 京东图书 …...
【Git 】Windows 系统下 Git 文件名大小写不敏感
背景 在 Windows 系统上,Git 对文件名大小写的不敏感性问题确实存在。由于 Windows 文件系统(如 NTFS )在默认情况下不区分文件名大小写所导致的。 原因分析 文件系统差异 Windows文件系统(如 NTFS)默认不区分文件名…...
【算法系列-二叉树】层序遍历
【算法系列-二叉树】层序遍历 文章目录 【算法系列-二叉树】层序遍历1. 算法分析🛸2. 相似题型🎯2.1 二叉树的层序遍历II(LeetCode 107)2.2 二叉树的右视图(LeetCode 199)2.3 二叉树的层平均值(LeetCode 637)2.4 N叉树的层序遍历(LeetCode 429)2.5 在每个…...
我的世界方块改进版
引子 之前文章的磁性方块,通过3D打印实现,也批量打印了一些,下图就是一个小树 使用过程中,发现磁力感觉不紧,所以想改进一版。 正文 之前的结构如下:: 如果出现相邻的空隙间的磁铁相互作用&am…...
博客搭建之路:hexo增加搜索功能
文章目录 hexo增加搜索功能本地搜索弊端algolia搜索 hexo增加搜索功能 hexo版本5.0.2 npm版本6.14.7 next版本7.8.0 作为一个博客,没有搜索功能,如何在大批文章中找到自己想要的,那在hexo中如何增加搜索功能呢? search:path: sea…...
2024年最新互联网大厂精选 Java 面试真题集锦(JVM、多线程、MQ、MyBatis、MySQL、Redis、微服务、分布式、ES、设计模式)
前言 春招,秋招,社招,我们 Java 程序员的面试之路,是挺难的,过了 HR,还得被技术面,在去各个厂面试的时候,经常是通宵睡不着觉,头发都脱了一大把,还好最终侥幸…...
MybatisPlus入门(一)MybatisPlus简介
一、MyBatis简介 MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率 - 官网:https://mybatis.plus/ https://mp.baomidou.com/ MyBatisPlus特性: - 无侵入:只做增强…...
QoS学习笔记
QoS业务分类 基于 DiffServ 服务模型的 QoS 业务可以分为以下几大类: 流分类和标记(Traffic classification and marking):要实现差分服务,需要首先将数据包分为不同的类别或者设置为不同的优先级。将数据包分为不同…...
图(邻接矩阵)知识大杂烩!!(邻接矩阵结构,深搜,广搜,prim算法,kruskal算法,Dijkstra算法,拓扑排序)(学会一文让你彻底搞懂!!)
小伙伴们大家好,今天给大家带来图(邻接矩阵)的各种知识,让你看完此文章彻底学会邻接矩阵的相关问题。 1.邻接矩阵表示方法 1.1知识讲解 我们用一个二维数组arr来表示图。若图为有向图,其中arr【i】【j】w表示i号点和…...
Prometheus自定义PostgreSQL监控指标
本文我们将介绍如何在Prometheus中创建自定义PostgreSQL指标。默认情况下由postgres_export运行的查询可能不能满足用户需求,但我们可以创建自定义查询,并要求postgres_exporter公开自定义查询的结果。postgres_exporter最近被移到了Prometheus Communit…...
400行程序写一个实时操作系统(十六):操作系统中的调度策略
前言 在前面我们完成了Sparrow的临界区的代码,使用临界区,能够解决常见的并发问题,现在该完善我们的调度算法了。 调度算法在操作系统领域常常是热门的话题。不同的用途将会使用不同的调度策略。在本节,笔者将为大家介绍一些操作…...
从安灯系统看汽车零部件工厂的智能制造转型
在当今快速发展的制造业领域,汽车零部件工厂正面临着日益激烈的市场竞争和不断提高的客户需求。为了在竞争中脱颖而出,实现可持续发展,许多汽车零部件工厂纷纷踏上智能制造转型之路。而安灯系统作为一种重要的生产管理工具,在这场…...
window7 iis建立网站/学电脑培训班
ice internal compiler error...
设计素材网站版权/营销策略是什么意思
torch.cuda.amp.autocast() 是PyTorch中一种混合精度的技术,可在保持数值精度的情况下提高训练速度和减少显存占用。 混合精度是指将不同精度的数值计算混合使用来加速训练和减少显存占用。通常,深度学习中使用的精度为32位(单精度ÿ…...
wordpress网站访问量/阿里指数官网
先来了解几个注解: Cacheable 表明所修饰的方法是可以缓存的:当第一次调用这个方法时,它的结果会被缓存下来,在缓存的有效时间内,以后访问这个方法都直接返回缓存结果,不再执行方法中的代码段。 这个注解可…...
东城手机网站建设/app拉新推广怎么做
在调研BFF的过程中,看到蚂蚁金服自研的BFF的开发框架BFF Chair是基于Egg.js开发的。BFF Chair没有开源,但是Egg.js已经开源了,如果需要引入BFF,需要基于Egg.js的基础上开发自己的BFF开发框架。 1 Egg.js是什么 Egg是一个为了开发…...
首都农村医学人才培养体系建设与农村医学人才培养的研究与实践 网站/怎样建立自己网站
C:\Users\Public\Thunder Network\XMP5\ProgramData\Subtitle\Online 复制直接拖入上方的地址栏即可找到。...
wordpress静态cdn/关键词搜索排名软件
0: 由于天朝的特殊,在国内很不好编译(主要是依赖库下载不了)。 所以记录下编译过程 需要的工具: debian 或者其他linux其他版本。 make,git,golang(最好1.11版本以上) 编译过程 export GOPATH/data/tidb mkdir -p /data/tidb/src/githu…...