详解tensorflow实现迁移学习实例


Posted in Python onFebruary 10, 2018

本文主要是总结利用tensorflow实现迁移学习的基本步骤。

所谓迁移学习,就是将上一个问题上训练好的模型通过简单的调整使其适用于一个新的问题。比如说,我们可以保留训练好的Inception-v3模型中所有的参数,只替换最后一层全连接层。在最后一层全连接层之前的网络称之为瓶颈层(bottleneck)。

持久化

首先需要简单介绍下tensorflow中的持久化:在tensorflow中提供了一个非常简单的API来保存和还原一个神经网络模型,这个API就是tf.train.Saver类。当采用该方法保存时会生成三个文件,一个文件是model.ckpt.meta,它保存了Tensorflow计算图的结构;第二个文件是model.ckpt,它保存了程序中每一个变量的取值;最后一个文件是checkpoint文件,这个文件中保存了一个目录下所有模型文件列表。

保存图

init_op = tf.initialize_all_variables()
with tf.Session() as sess:
  sess.run(init_op)
  saver.save(sess, "model.ckpt")

加载图

saver = tf.train.import_meta_graph("model.ckpt.meta")
with tf.Session() as sess:
  saver.restore(sess, "model.ckpt")

迁移学习

第一步: 读取加载已经训练好的模型

在inception-v3模型代表瓶颈层结果的张量名称是'pool3/_reshape:0',图像输入张量对应的名称'DecodeJpeg/contents:0'

BOTTLENECK_TENSOR_NAME = 'pool_3/_reshape:0'
JPEG_DATA_TENSOR_NAME = 'DecodeJpeg/contents:0'
#读取已经训练好的模型
  with gfile.FastGFile(os.path.join(MODEL_DIR, MODEL_FILE), 'rb') as f:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())
  bottleneck_tensor, jpeg_data_tensor = tf.import_graph_def(graph_def, return_elements=[BOTTLENECK_TENSOR_NAME, JPEG_DATA_TENSOR_NAME])

第二步:利用读取的模型,定义新的神经网络输入,这个输入就是新的图片经过Inception-v3模型前向传播到达瓶颈层的取值,是一种特征提取过程。

def run_bottlenect_on_images(sess, image_data, image_data_tensor, bottlenect_tensor):
  bottlenect_values = sess.run(bottlenect_tensor, {image_data_tensor: image_data})

  # 经过卷积网络处理后的是一个思维数组,压缩成一个特征,一维向量输出
  bottlenect_values = np.squeeze(bottlenect_values)
  return bottlenect_values

该过程实际上利用获取的tensor计算图片的特征向量,完成特征提取的过程。

第三步:利用获取的图像的特征向量完成接下来的任务(比如分类)

以上是仅关键代码。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python判断IP地址合法性的方法实例
Mar 13 Python
wxPython事件驱动实例详解
Sep 28 Python
以一个投票程序的实例来讲解Python的Django框架使用
Feb 18 Python
python实现多线程抓取知乎用户
Dec 12 Python
python的中异常处理机制
Aug 30 Python
Django框架实现的简单分页功能示例
Dec 04 Python
使用python写的opencv实时监测和解析二维码和条形码
Aug 14 Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 Python
python生成并处理uuid的实现方式
Mar 03 Python
Python定时任务APScheduler原理及实例解析
May 30 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
Jul 14 Python
Python  序列化反序列化和异常处理的问题小结
Dec 24 Python
Python学习之Django的管理界面代码示例
Feb 10 #Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
Feb 10 #Python
tensorflow训练中出现nan问题的解决
Feb 10 #Python
用Eclipse写python程序
Feb 10 #Python
tensorflow建立一个简单的神经网络的方法
Feb 10 #Python
python取代netcat过程分析
Feb 10 #Python
浅谈Python黑帽子取代netcat
Feb 10 #Python
You might like
第五节--克隆
2006/11/16 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
PHP 导出Excel示例分享
2014/08/18 PHP
PHP hebrev()函数用法讲解
2019/02/21 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
用javascript获取textarea中的光标位置
2008/05/06 Javascript
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
JQuery中的html()、text()、val()区别示例介绍
2014/09/01 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
AngularJs Dependency Injection(DI,依赖注入)
2016/09/02 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
angularJS自定义directive之带参方法传递详解
2018/10/09 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
微信小程序实现消息框弹出动画
2020/04/18 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
Vue this.$router.push(参数)实现页面跳转操作
2020/09/09 Javascript
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
Python复制目录结构脚本代码分享
2015/03/06 Python
Python ldap实现登录实例代码
2016/09/30 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
Python实现矩阵相乘的三种方法小结
2018/07/26 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
Python @property装饰器原理解析
2020/01/22 Python
基于Python生成个性二维码过程详解
2020/03/05 Python
Python pysnmp使用方法及代码实例
2020/08/24 Python
Python Http请求json解析库用法解析
2020/11/28 Python
日本网路线上商品代购服务:转送JAPAN
2016/08/05 全球购物
学生党支部先进事迹
2014/02/04 职场文书
2014道德模范事迹材料
2014/02/16 职场文书
早会主持词
2014/03/17 职场文书
教师产假请假条
2014/04/10 职场文书
一年级学生评语大全
2014/04/21 职场文书
责任书范本
2014/08/25 职场文书
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js