web python识花_TensorFlow迁移学习识花实战案例

2023-11-08

TensorFlow 迁移学习识花实战案例

本文主要介绍如何使用迁移学习训练图片识别花朵的模型,即识别出图片上是何种花朵。

本文档中涉及的演示代码和数据集来源于网络,你可以在这里下载到:TRANSFER_LEARNING.zip

本模块将通过识花程序来讲解迁移学习,以及如何使用迁移学习来进行训练,具体包括:

什么是迁移学习

为什么要使用迁移学习

识花模型中迁移学习的思路

演示代码文件介绍

用例执行过程

什么是迁移学习

迁移学习是一种模型训练的技巧,指的是将在已有的源任务的模型中计算出来的知识迁移到目标任务上。似乎像是站在巨人肩膀上进行模型训练。

以人的学习过程为例:

人类的思维能够将学到的知识经验保留起来,并当做更高阶知识的基础。如果遇到新的情景,人们能够将已经学到的知识经验运用进来,从而更快速的掌握新的知识。比如学好数学,你能很快掌握物理、机器学习这些知识。

但是传统的机器学习却没有这种能力。比如识别图片中是否有花。如果训练的图片都是沙漠里的花,那么用这个模型判别水中的花就差很多了。

如何把这个道理,运用到深度学习中呢?

如果将识别图片中是否有梅花作为训练任务,那这个任务能否拆分一下呢?比如先识别图片上是否有花,然后再继续识别该花是否是梅花呢?

答案是肯定的。这里的识别图片中是否有花是定义中的源任务,而识别图片中是否有梅花则是定义中的目标任务。

所谓的迁移,就是将源任务的目标转化成目标任务的目标。在“识花”这一源任务的基础上添加此花是否是梅花这一逻辑,从而将“识花”转化成“识梅花”这一目标任务。

为什么要使用迁移学习

牛顿好像说过:站在巨人的肩膀上。

程序员们好像也说过:不要重复造轮子。

这些都告诉我们,善于利用已有的东西,能加快你的工作进展。大家写web程序,都会先选择一个合适的web框架,然后在封装好了的Request Handler里面添加自己的业务逻辑,从而能更快速的搭建起web服务。

深度学习是近年来人工智能领域最火热的话题之一。但是促使深度学习快速发展的,除了算法上的进步外,还有大量的数据以及强悍的计算力。普通人想要玩转深度学习,那么数据和计算力都是遥不可及的高山。

以 ImageNet 举例,该数据集有上千万的数据量。用英伟达 M40 GPU 完成 90-epoch ImageNet-1k 的 ResNet-50 训练要花 14 天。 FaceBook 曾经用1小时训练了 ImageNet ,但是整套设备高达 400 多万美金。

而迁移学习能够让我们利用别人训练好的模型来继续训练,这无疑能帮我们省时省力省数据。

而本实例就可以在已有模型的基础上,利用迁移学习只使用几千张图片和一块 CPU 轻松完成识花训练,惊不惊喜?!

识花模型中迁移学习的思路

本实例使用的是 VGG 模型,首先介绍 VGG 模型,然后介绍如何使用已有的 VGG 模型来构造新的模型。

VGG模型介绍

VGG 是视觉领域竞赛 ILSVRC 在 2014 年的获胜模型,在 ImageNet 上的错误率是 7.3% ,比前一年的 11.7% 的世界纪录大幅超前。VGG 基本上继承了 AlexNet 深的思想,并且发扬光大,VGG 模型更深。AlexNet 只用到了 8 层网络,而 VGG 的两个版本分别是 16 层网络版和 19 层网络版。但这俩版本有几乎完全一样的准确度,只是运算起来 VGG16 更快一些。

在该实践中,我们主要使用 VGG16。

VGG 的模型图大致如下:

VGG 的输入数据格式是 244 * 224 * 3 的像素数据,经过一系列的卷积神经网络和池化网络处理之后,输出的是一个 4096 维的特征数据,然后再通过 3 层全连接的神经网络处理,最终由 softmax 规范化得到分类结果。

在该实践中,我们只获取上图中 Layer6 之后的数据,也是 4096 维的特征值。具体做法就是代码中的:

codes = sess.run(vgg.relu6, feed_dict=feed_dict)

# codes(shape:(4096, None))就是最终需要的4096维特征值

迁移 VGG 的思路

首先使用 VGG 模型去获取图片的特征,这些特征是 VGG16 模型通过训练获取到的能够代表该图片主要特征的 4096 维数值。我们利用这些特征值作为输入,去训练一个 DNN 模型,用来识别这组特征值属于哪种花朵。

本实践的具体思路为:

其中 label 为 int 类型 ,是将花朵按照种类进行的编号。

数据处理:将图片用 VGG 模型计算出 4096 维特征值,并和 label 一同存储在 TFRecord 中

模型训练:使用(特征值,label)训练 DNN 模型

图片预测:将图片先使用 VGG 模型计算出特征值,然后再传入训练好的 DNN 模型进行预测。

从上面思路中可以清晰的看出:迁移学习中,只是使用已有的模型计算出一组特征值而已,类似一种特殊的数据处理步骤。

演示代码文件介绍

文件列表如下:

download.py

用来下载并解压训练图片压缩包,以及下载 VGG16 的 npy 格式的模型文件。如果感觉下载慢,可以 copy 里面的链接使用迅雷下载,并自行解压。

image_processing.py

将图片经过 VGG16 模型进行处理,并转换成 TFrecord 存储格式。

prediction.py

在 training.py 执行完后,通过指定 estimator 的 model_dir 获取训练好的 DNN 模型来预测图片是何种花朵。

training.py

使用 TFrecord 数据,并利用 estimator 来训练 DNN 模型,模型文件默认保存在 ./estimator_model_dir 。

vgg16.py

通过加载 VGG16 的 npy 文件,获取已训练好的模型,并可以通过 TensorFlow 代码调用。

vgg_codes_lables_test

image_processing.py 的输出,training.py 的测试数据集。

vgg_codes_lables_train

image_processing.py 的输出,training.py 的训练数据集。

用例执行过程

执行环境:

本用例可以在本地执行,这也是迁移学习的一大好处。

需要安装一些依赖包,如:scikit-image ,TensorFlow1.4 等。

步骤如下:

python download.py

python training.py

python prediction.py --image_path flower_photos/tulips/8484905084_6a18c62b13_m.jpg

如果想自行获取 vgg_codes_lables_test 和 vgg_codes_lables_train ,可以执行:

python image_processing.py

当然示例代码中还有其他细节,这里就不做详细的描述了。可以直接阅读代码

您的任何问题和反馈都是受欢迎的。

祝您TensorFlow之旅愉快,祝好!

更多帮助

在使用过程中如果遇到问题,您可以提交工单咨询,或者加入用户交流 QQ 群:661657497 寻求帮助。

参考

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

web python识花_TensorFlow迁移学习识花实战案例 的相关文章

  • matlab 降维工具

    降维工具箱drtool 这个工具箱的 主页如下 现在的最新版本是2013 3 21更新 版本v0 8 1b http homepage tudelft nl 19j49 Matlab Toolbox for Dimensionality R
  • 系统服务器地云盘上,系统服务器地云盘上

    系统服务器地云盘上 内容精选 换一换 磁盘增强型弹性云服务器自带高存储带宽和IOPS的本地盘 具有高存储IOPS以及读写带宽的优势 同时 本地盘的价格更加低廉 在海量数据存储场景下 具备更高的性价比 磁盘增强型弹性云服务器具备如下特点 本地
  • 依赖注入之@Value原理(整体流程)

    Autowired等注解 Spring依赖注入之 Autowired Qualifier Primary Priority注解用法 Spring依赖注入之 Autowired Qualifier Primary Priority注解原理 上
  • win10 蓝牙耳机已连接但是耳机仍没有声音,音频仍是扬声器输出问题的出现条件及解决方案

    此问题可能分电脑分耳机类型出现 本人因耳机Fill CC2连接笔记本频繁出现此问题故以此文记录 问题出现原因 疑似 1 笔记本后台挂的程序应用过多 且笔记本开机通电时间过长 2 连接蓝牙耳机时笔记本扬声器正在发声 解决方法 27条消息 wi
  • 【xgboost】贝叶斯自动调参代码

    工作中 很多场景下会用到xgboost模型 如风控 催收 营销 推荐等待 在用xgboost模型进行模型训练的时候 也经常用贝叶斯自动调参来搜索最优的参数 现在把相关的代码贴出来 供大家参考 目前是支持了xgboost和lightgbm模型
  • VS2010安装失败解决办法

    1 运行regedit打开注册表 2 找到HKEY LOCAL MACHINE SOFWARE Microsoft Internet Explorer MAIN 3 MAIN子键的权限问题 修改成 允许完全控制 MAIN子键点击右键里弹出权
  • 解决Vue引入百度地图JSSDK:BMap is undefined 问题

    百度地图官网文档介绍使用JSSDK时 仅提供了三种引入方式 script引入 异步加载 npm install vue baidu map save 或 cnpm install vue baidu map save 全局引入 但vue项目
  • 每天一练——斐波那契数列前N项之和

    什么是斐波那契数列 斐波那契数列就是前两项之和会等于第三项 斐波那契数列通常以一为起始 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 正如我所说的前两项之和会等于第三项以此类推 那么
  • 【Unity3D】Unity5.6的Mecanim Animator动画系统结合MMD4Mecanim插件舞蹈动画

    1 下载MMD4Mecanim 官网 http stereoarts jp 我用的是最新版的MMD4Mecanim Beta 20170423 zip Unity是5 6 0版本的 2 解压后导入MMD4Mecanim unitypacka
  • 打印机漏洞(rce)

    20210510 0 出发 在翻阅论文的时候 突然想起来之前的时候 看到过一些打印机的漏洞 然后就在谷歌上搜索了一下 printer rce 然后找到了这篇文章 A Sheep in Wolf s Clothing Finding RCE
  • 老鸟重写程序需要准备点什么

    整体来说 老鸟工作已久 对语言 架构 算法 性能 安全 业务 各类型特点会掌控能力更高 但是年久未动手 不免生疏 为此专门整理需要的基本内容 可以抽空回味一下 在紧急上手之后 两周内查缺补漏 区别与新手面对任何问题的一脸懵逼 老鸟对所有技术
  • Redis配置优化

    Redis Redis 远程字典服务器 是一个开源的 使用c语言编写的NoSQL数据库 Redis 基于内存运行并支持持久化 采用key value 键值对 的存储形式 是目前分布式架构中不可或缺的一环 Redis服务器程序是单进程模型 也
  • 21世纪的管理挑战

    朋友很早前推荐看的德鲁克系列 最近在孔网搞到了 顺便在此记录读书笔记和想法 如下 第一章 管理的新范式 管理是企业管理 新学科 公共管理 不同组织的任务和挑战也不存在巨大的差异 企业必须具有一个恰当的组织形式 组织不是绝对的 它是提高人们在
  • 科学计数法 C语言

    题目 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法 其满足正则表达式 1 9 0 9 E 0 9 即数字的整数部分只有 1 位 小数部分至少有 1 位 该数字及其指数部分的正负号即使对正数也必定明确给出 现以科学计数法的格式给
  • gcc (GNU编译器套件)

    gcc GNU编译器套件 编辑 GNU编译器套件 GNU Compiler Collection 包括 C C Objective C Fortran Java Ada和 Go语言的前端 也包括了这些语言的库 如libstdc libgcj
  • va_list(),va_start(),va_arg(),va_end()

    va list va start va arg va end 详解 一 写一个简单的可变参数的C函数 下面我们来探讨如何写一个简单的可变参数的C函数 写可变参数的C函数要在程序中用到以下这些宏 void va start va list a
  • python redis 获取所有key

    使用scan代替getKeys 线上的登录用户有几百万 数据量比较多 keys算法是遍历算法 复杂度是O n 也就是数据越多 时间越高 数据量达到几百万 keys这个指令就会导致 Redis 服务卡顿 因为 Redis 是单线程程序 顺序执
  • Nodejs——时间戳与日期相互转换

    时间格式化的库 silly datetime 安装 npm i silly datetime save var sillyDateTime require silly datetime 获取当前时间 并转换为年月份 时分秒的格式 conso
  • Mybatis 插入大量数据性能问题的解决(Caused by: java.sql.SQLException: ORA-04030: 在尝试分配 2024 字节 (kxs-heap-c,kg hs)

    最近写的需求 需要频繁的往数据库中插入大量的数据 多达上万条 最后导致oracle 数据库直接挂掉了 这个问题肯定要解决的 主要的原因就是一次性插入这么多数据 oracle 数据库承受不住 最后 报Caused by java sql SQ

随机推荐

  • linux 汇编 cqo,x64asm: 包括内存汇编程序,解析器和链接器的C ++库

    x64asm x64asm is a c 11 library for working with x86 64 assembly It provides a parser in memory assembler and linker and
  • oracle表的常见字段类型有哪些,Oracle数据库的字段类型

    字 段 类 型 CHAR 固定长度字符串 最大长度2000 bytes VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749 NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes N
  • k8s七

    参考资料 深入剖析Kubernetes 张磊 目录标题 一 DaemonSet 简介 二 DaemonSet的实现原理 1 DaemonSet是如何确保每个节点只运行一个Pod 2 如何只在指定的节点上运行Pod 3 污点与容忍 三 使用D
  • 利用sprintf和sscanf实现十六进制和十进制之间的相互转换

    利用sprintf和sscanf实现十六进制和十进制之间的相互转换 2013 10 27 12 49 7497人阅读 评论 0 收藏 举报 分类 C C 语言 369 版权声明 本文为博主原创文章 未经博主允许不得转载 cpp view p
  • 金蝶 K3 ERP 采购管理 表结构明细 POOrder/Entry

    select from t TableDescription 金蝶K3表名备注 t tabledescription 采购订单POOrder 单头 FBrNo 公司机构内码 STRING 公司机构内码 FTranType 单据类型 INTE
  • X.509数字证书内容结构

    更多区块链技术与应用分类 区块链应用 区块链开发 以太坊 Fabric BCOS 密码技术 共识算法 比特币 其他链 通证经济 传统金融场景 去中心化金融 防伪溯源 数据共享 可信存证 X 509证书 数字证书是现代信息安全的核心技术 无论
  • Calendar类常用方法

    Calendar常量 field 的作用 Calendar cal Calendar getInstance cal get Calendar DATE 当天 1 31 cal get Calendar DAY OF MONTH 当天 1
  • JTest的使用

    jtest 项目中用到了JTest 一款商业化java白盒测试工具 开个头慢慢补充 简介 jtest是parasoft公司推出的一款针对java语言的自动化白盒测试工具 它通过自 动实现java的单元测试和代码标准校验 来提高代码的可靠性
  • elasticsearch集群文件及路径设置

    es集群文件路径 1 数据目录 日志目录以及插件目录 默认情况下es会将plugin log data config file都放在es的安装目录中 这有一个问题 就是在进行es升级的时候 可能会导致这些目录被覆盖掉使我们集群中的文件或数据
  • Postman应用——下载注册和登录

    文章目录 下载安装 注册登录 注册账号 登录账号 下载安装 Postman下载 https www postman com 访问链接后 进入首页 根据自己的操作系统下载对应的版本 找到下载到的目录直接双击 exe文件 会默认安装在C盘 安装
  • LeetCode(力扣)题目中二叉树的如何生成?根据给定顺序列表生成二叉树(python)

    在刷 leetcode 二叉树相关的题目时 经常有这样给定的例子 例如 检查平衡性 实现一个函数 检查二叉树是否平衡 在这个问题中 平衡树的定义如下 任意一个节点 其两棵子树的高度差不超过 1 示例 1 给定二叉树 3 9 20 null
  • Mybatis-plus 分页排序 错乱-丢失

    今天生产环境出行了一个分页排序错乱的问题 当时有点懵 用的mybatis plus的分页插件实现的 往常也用但是没有出现这个 分页排序 错乱 丢失问题 说实话当时有点懵 经过排查分析 得出了结果 Mybatis plus 分页排序 错乱 丢
  • C语言变参数函数详解

    文章目录 一 前言 二 printf函数源码 三 C语言函数调用堆栈过程 调用约定 压栈过程 那么再来看看其他情况 四 C语言实现可变参数详解 五 需要关注的一些问题 一 前言 在C语言中 我们不管是使用标准库函数还是使用自定义的函数 我们
  • 帧同步(LockStep)该如何反外挂

    在中国的游戏环境下 反挂已经成为了游戏开发的重中之重 甚至能决定一款游戏的生死 吃鸡就是一个典型的案例 目前参与了了一款动作射击的MOBA类游戏的开发 同步方案上选择了帧同步技术 LockStep而非snapshots以下同 那么就有很多人
  • LUA实现麻将胡牌判定

    用LUA实现麻将胡牌的一个思路 hand table 41 42 43 22 21 43 22 11 11 11 42 33 33 33 手牌 card count table 1 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8
  • 【若依】线程池,分页工具,定时任务,aop日志,全局异常处理功能实现

    若依 线程池 分页工具 定时任务 aop日志 全局异常处理功能实现 1 分页工具 使用方法 在调用sql语句前 调用 PageHelper startPage 方法就行了 若依包装过了 调用startPage 方法 1 pagehelper
  • 用c++编写的植物大战僵尸

    源码如下 include
  • 显卡3080设备CentOS 7.9 环境安装最新anconda、tensorflow-gpu 、cudatoolkit、cudnn、 python

    目标 使用3080显卡搭建环境 系统安装 显卡驱动安装 安装anconda 安装 python 安装 cuda 安装 cudnn 安装 tensorflow 一 系统安装 详见历史文档 二 显卡驱动安装 详见历史 三 整理自己需要安装的环境
  • 期货不变的本质是什么意思(期货不变的本质是什么意思呀)

    期货的本质是什么 本质是一个风险转移工具 通过把风险转移给愿意投机获利 亏损的人 产业方得以获得确定的盈利预期 这是期货的核心价值 狭义理论认为期货市场是 零和 负和 游戏 但如果把眼光放宽 把实体产业加进来 可以发现期货是市场环境里一项必
  • web python识花_TensorFlow迁移学习识花实战案例

    TensorFlow 迁移学习识花实战案例 本文主要介绍如何使用迁移学习训练图片识别花朵的模型 即识别出图片上是何种花朵 本文档中涉及的演示代码和数据集来源于网络 你可以在这里下载到 TRANSFER LEARNING zip 本模块将通过