当前位置: 首页 > news >正文

经典卷积模型回顾14—vgg16实现图像分类(tensorflow)

VGG16是由牛津大学计算机视觉小组(Visual Geometry Group)开发的深度卷积神经网络模型。其结构由16层组成,其中13层是卷积层,3层是全连接层。

 

VGG16被广泛应用于各种计算机视觉任务,如图像分类、目标检测和人脸识别等。其在ImageNet Large Scale Visual Recognition Challenge (ILSVRC)比赛中取得了第一名的成绩,准确率达到了92.7%。

 

VGG16的主要特点是:

- 模型非常深,卷积层13层,全连接层3层,共有138M参数,能够提取出更多的图像特征;

- 所有卷积层都是3x3大小的卷积核和1个像素的步幅,这种设计可以得到更小的卷积层,并且每层都可以学到更多的特征;

- 采用了大量的卷积层,可以逐步提取出更加抽象、高级别的特征,提高了模型的准确率;

- 采用了局部响应归一化(Local Response Normalization)层,强化了模型的泛化能力;

- 采用了Dropout技术,减少了模型的过拟合。

 

总之,VGG16是一个非常经典的深度卷积神经网络模型,被广泛应用于各种计算机视觉任务,并且在该领域取得了极大的成功。

下面是vgg16在TensorFlow 2中实现花类图像分类的步骤:

 

步骤1:导入必要的库

 

```

import tensorflow as tf

from tensorflow.keras import datasets, layers, models

import matplotlib.pyplot as plt

```

 

步骤2:准备数据集

 

下载花类数据集,这里使用TensorFlow自带的花类数据集。

 

```

(train_images, train_labels), (test_images, test_labels) = datasets.flowers.load_data()

```

 

步骤3:数据预处理

 

将图像数据归一化,并将标签进行one-hot编码。

 

```

train_images, test_images = train_images / 255.0, test_images / 255.0

 

train_labels = tf.keras.utils.to_categorical(train_labels, num_classes=5)

test_labels = tf.keras.utils.to_categorical(test_labels, num_classes=5)

```

 

步骤4:定义模型

 

定义vgg16模型,包括13个卷积层和3个全连接层。

 

```

model = models.Sequential([

    layers.Conv2D(64, (3, 3), activation='relu', input_shape=(224, 224, 3), padding='same'),

    layers.Conv2D(64, (3, 3), activation='relu', padding='same'),

    layers.MaxPooling2D((2, 2)),

    

    layers.Conv2D(128, (3, 3), activation='relu', padding='same'),

    layers.Conv2D(128, (3, 3), activation='relu', padding='same'),

    layers.MaxPooling2D((2, 2)),

    

    layers.Conv2D(256, (3, 3), activation='relu', padding='same'),

    layers.Conv2D(256, (3, 3), activation='relu', padding='same'),

    layers.Conv2D(256, (3, 3), activation='relu', padding='same'),

    layers.MaxPooling2D((2, 2)),

    

    layers.Conv2D(512, (3, 3), activation='relu', padding='same'),

    layers.Conv2D(512, (3, 3), activation='relu', padding='same'),

    layers.Conv2D(512, (3, 3), activation='relu', padding='same'),

    layers.MaxPooling2D((2, 2)),

    

    layers.Conv2D(512, (3, 3), activation='relu', padding='same'),

    layers.Conv2D(512, (3, 3), activation='relu', padding='same'),

    layers.Conv2D(512, (3, 3), activation='relu', padding='same'),

    layers.MaxPooling2D((2, 2)),

    

    layers.Flatten(),

    layers.Dense(4096, activation='relu'),

    layers.Dense(4096, activation='relu'),

    layers.Dense(5, activation='softmax')

])

```

 

步骤5:编译和训练模型

 

设置优化器、损失函数和评估指标,并进行模型训练。

 

```

model.compile(optimizer='adam',

              loss='categorical_crossentropy',

              metrics=['accuracy'])

 

history = model.fit(train_images, train_labels, epochs=20, 

                    validation_data=(test_images, test_labels))

```

 

步骤6:可视化训练结果

 

通过可视化训练结果,可以了解模型的训练效果。

 

```

plt.plot(history.history['accuracy'], label='accuracy')

plt.plot(history.history['val_accuracy'], label = 'val_accuracy')

plt.xlabel('Epoch')

plt.ylabel('Accuracy')

plt.ylim([0, 1])

plt.legend(loc='lower right')

```

 

相关文章:

经典卷积模型回顾14—vgg16实现图像分类(tensorflow)

VGG16是由牛津大学计算机视觉小组(Visual Geometry Group)开发的深度卷积神经网络模型。其结构由16层组成,其中13层是卷积层,3层是全连接层。 VGG16被广泛应用于各种计算机视觉任务,如图像分类、目标检测和人脸识别等。…...

#Vue2篇:keep-alive的属性和方法

定义 keep-alive 组件是 Vue.js 内置的一个高阶组件,用于缓存其子组件,以提高组件的性能和响应速度。 除了基本用法之外,它还提供了一些属性和方法,以便更好地控制缓存的组件。 属性 include属性用于指定哪些组件应该被缓存&a…...

webpack指南(项目篇)——webpack在项目中的运用

系列文章目录 webpack指南(基础篇)——手把手教你配置webpack webpack指南(优化篇)——webpack项目优化 文章目录系列文章目录前言一、配置拆分二、修改启动命令三、定义环境变量四、配置路径别名总结前言 前面我们对webpack的基…...

unicode字符集与utf-8编码的区别,unicode转中文工具、中文转unicode工具(汉字)

在cw上报的报警信息中,有一个name字段的值是\u4eba\u4f53 不知道是啥,查了一下,是unicode编码,用下面工具转换成汉字就是“人体” 参考文章:https://tool.chinaz.com/tools/unicode.aspx 那么我很好奇,uni…...

3D数学系列之——再谈特卡洛积分和重要性采样

目录一、前篇文章回顾二、积分的黎曼和形式三、积分的概率形式(蒙特卡洛积分)四、误差五、蒙特卡洛积分计算与收敛速度六、重要性采样七、重要性采样方法和过程八、重要性采样的优缺点一、前篇文章回顾 在前一篇文章3D数学系列之——从“蒙的挺准”到“蒙…...

Python错误 TypeError: ‘NoneType‘ object is not subscriptable解决方案汇总

目录前言一、引发错误来源二、解决方案2-1、解决方案一(检查变量)2-2、解决方案二(使用 [] 而不是 None)2-3、解决方案三(设置默认值)2-4、解决方案四(使用异常处理)2-5、解决方案五…...

VMware空间不足又无法删除快照的解决办法

如果因为快照删除半路取消或者失败,快照管理器就不再显示这个快照,但是其占用的空间还在,最终导致硬盘不足。 可以百度到解决方案,就是在快照管理器,先新建一个,再点删除,等待删除完成就可以将…...

类和对象(一)

类和对象(一) C并不是纯面向对象语言 C是面向过程和面向对象语言的! 面向过程和面向对象初步认识: C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基…...

Java 不同路径

不同路径中等一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径&#xff1f…...

【SAP PO】X-DOC:SAP PO 接口配置 REST 服务对接填坑记

X-DOC:SAP PO 接口配置 REST 服务对接填坑记1、背景2、PO SLD配置3、PO https证书导入1、背景 (1)需求背景: SAP中BOM频繁变更,技术人员在对BOM进行变更后,希望及时通知到相关使用人员 (2&…...

最新研究!美国爱荷华州立大学利用量子计算模拟原子核

爱荷华州立大学物理学和天文学教授James Vary(图片来源:网络)美国爱荷华州立大学物理学和天文学教授James Vary和来自爱荷华州立大学、马萨诸塞州塔夫茨大学,以及美国能源部加利福尼亚州劳伦斯伯克利国家实验室的研究人员&#xf…...

零入门kubernetes网络实战-22->基于tun设备实现在用户空间可以ping通外部节点(golang版本)

《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 本篇文章主要是想做一个测试: 实现的目的是 希望在宿主机-1上,在用户空间里使用ping命令发起ping请求,产生的icmp类型的…...

web安全——Mybatis防止SQL注入 ssrf漏洞利用 DNS污染同源策略

目录 0x01 Mybatis防止SQL注入 0x02 sqlmap中报错注入判断 0x03 ssrf漏洞利用 0x04 SSRF重绑定 0x05 DNS污染...

smp_init过程解析

当你看到这样的log,会不会很慌张?竟然由CPU没有启动成功,除了什么故障?本文将结合我遇到的一个问题,将启动过程中bringup secondary cpu的过程分析一下。smp_init代码如下:602 void __init smp_init(void) …...

判断推理之逻辑判断

考点一翻译推理(一)题目特征题干或选项中出现多组“逻辑关联词”,如:“如果……那么……”、“只要……就……”、“只有……才……”、“所有”、“有些”、“……且……”、“ ……或……”等典型逻辑关联词。(二&am…...

2023金三银四常见Handler面试总结,附带答案

以下的Handler的面试题都是在面试过程中总结出来比较常见的面试题,现在分享给大家,希望可以帮助你们!1.Handler的实现原理从四个方面看Handler、Message、MessageQueue 和 Looper Handler:负责消息的发送和处理 Message:消息对象,…...

为什么机器人操作系统ROS1、ROS2这么难学

AI回复:ROS1、ROS2是机器人操作系统,涉及到很多复杂的概念和技术,需要有一定的编程和机器人知识基础才能学习。此外,ROS1和ROS2的架构和设计也有很大的不同,需要花费一定的时间和精力去学习和适应。但是,一…...

day01

授课老师 :陶国荣 联系方式 : taogrtedu.cn 授课阶段 : Web前端基础 授课内容 : HTML CSS JavaScript 文章目录一、讲师和课程介绍二、Web前端介绍1. 什么是网页2. 网页的组成3. 网页的优势4. 开发前的准备三、 HTML语法介绍…...

第四十章 linux-并发解决方法五(顺序锁seqlock)

第四十章 linux-并发解决方法四(顺序锁seqlock) 文章目录第四十章 linux-并发解决方法四(顺序锁seqlock)顺序锁的设计思想是,对某一共享数据读取时不加锁,写的时候加锁。为了保证读取的过程中不会因为写入名…...

【SPSS】交叉设计方差分析和协方差分析详细操作教程(附案例实战)

🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 方差分析概述 交叉设计方差分析...

SAP EWM开发实战:手把手教你用ABAP OO类 /SCWM/CL_SP_PRD_INB 创建内向交货单

SAP EWM开发实战:基于ABAP OO类实现内向交货单自动化创建 1. 理解内向交货单创建的技术背景 在SAP扩展仓库管理(EWM)系统中,内向交货单(Inbound Delivery)是管理入库流程的核心凭证。与传统的SAP ERP系统不同,EWM模块在设计上采用了更加灵活的…...

二分查找/二分答案

0.前言二分算法(Binary Search),也叫折半查找,是一种在有序数据集合中高效查找目标值的算法。它通过不断将查找范围缩小一半,快速定位目标,时间复杂度为 O(logn),远优于线性查找的 O(n)。1.原理…...

3个核心价值重塑漫画阅读体验:Venera跨平台漫画阅读器全面解析

3个核心价值重塑漫画阅读体验:Venera跨平台漫画阅读器全面解析 【免费下载链接】venera A comic app 项目地址: https://gitcode.com/gh_mirrors/ve/venera 当你在手机上读到精彩漫画章节却不得不中断通勤,回家后打开电脑却要重新寻找上次阅读位置…...

电赛小车避坑指南:从2011到2024,那些年我们踩过的传感器和通信模块的‘坑’

电赛小车避坑指南:从2011到2024,那些年我们踩过的传感器和通信模块的"坑" 参加全国大学生电子设计竞赛的同学们都知道,小车控制类赛题一直是热门选项。从2011年的双车自主超车到2024年的自动行驶小车,这些题目看似简单&…...

VSCode党必看!用轻量级方案玩转LaTeX:2024年TexLive+VSCode配置全攻略

VSCode党必看!用轻量级方案玩转LaTeX:2024年TexLiveVSCode配置全攻略 对于习惯在VSCode中高效编码的开发者而言,切换到传统LaTeX编辑器往往意味着要放弃熟悉的快捷键、扩展生态和流畅的代码体验。本文将带你用完全基于VSCode的轻量级方案构建…...

个人记账自动化:OpenClaw+nanobot解析消费短信

个人记账自动化:OpenClawnanobot解析消费短信 1. 为什么需要自动化记账 每个月末看着银行卡余额叹气时,我总在想:钱到底花哪儿了?手动记账App试过七八个,最终都败给"忘记记录"这个人类通病。直到发现消费短…...

告别手动调参!模糊PID如何让直流电机在负载突变时稳如泰山?

模糊PID控制:让直流电机在负载突变时稳如泰山的实战指南 引言:工业自动化中的电机控制痛点 在自动化产线上,直流电机突然遭遇负载变化时,你是否也经历过这样的场景?——机械臂正在精准抓取工件,突然因为物料…...

3分钟搞定网易云音乐加密文件:NCMD解密工具终极指南

3分钟搞定网易云音乐加密文件:NCMD解密工具终极指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐的NCM加密文件无法在其他播放器播放而烦恼吗?今天我要为你介绍一款简单高效的音频解密神器…...

ChatTTS在政务热线场景落地:拟真语音提升市民服务体验真实案例

ChatTTS在政务热线场景落地:拟真语音提升市民服务体验真实案例 1. 项目背景与价值 政务热线是政府与市民沟通的重要桥梁,但传统语音系统存在明显痛点:机械化的语音播报缺乏人情味,长时间等待的提示音让市民感到烦躁,…...

STM32F1XX 的 CAN 的 波特率配置

参考文档: CAN总线波特率的设定——以STM32F103为例 - 知乎 42. CAN—通讯实验 — [野火]STM32库开发实战指南——基于野火霸道开发板 文档 基本知识 (SMP 采样率) STM32F1系列开发板设置的系统时钟大小 SYSCLK(系统时钟&…...