详解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中zip()函数用法实例教程
Jul 31 Python
Python模仿POST提交HTTP数据及使用Cookie值的方法
Nov 10 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
Aug 23 Python
python中的错误处理
Apr 10 Python
Python 中 Virtualenv 和 pip 的简单用法详解
Aug 18 Python
Python装饰器的执行过程实例分析
Jun 04 Python
Python3.4学习笔记之列表、数组操作示例
Mar 01 Python
python控制nao机器人身体动作实例详解
Apr 29 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
python字符串的index和find的区别详解
Jun 20 Python
Python实现文件压缩和解压的示例代码
Aug 12 Python
利用Python如何画一颗心、小人发射爱心
Feb 21 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
PHP删除数组中指定下标的元素方法
2018/02/03 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
使用JavaScript switch case 另类写法
2010/03/14 Javascript
JS代码判断IE6,IE7,IE8,IE9的函数代码
2013/08/02 Javascript
js中call与apply的用法小结
2013/12/28 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
JavaScript汉诺塔问题解决方法
2015/04/21 Javascript
jQuery跨域问题解决方案
2015/08/03 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
vue.js删除动态绑定的radio的指定项
2017/06/02 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
2018/09/19 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
2019/09/25 Javascript
vue实现在线翻译功能
2019/09/27 Javascript
vue实现购物车选择功能
2020/01/10 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
[08:08]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY
2014/06/25 DOTA
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
详解Python中heapq模块的用法
2016/06/28 Python
Python生成随机密码的方法
2017/06/16 Python
python binascii 进制转换实例
2019/06/12 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
Python爬虫后获取重定向url的两种方法
2021/01/19 Python
Hudson Jeans官网:高级精制牛仔裤
2018/11/28 全球购物
医学院校毕业生自荐信范文
2014/01/01 职场文书
教师先进工作者事迹材料
2014/05/01 职场文书
安全目标管理责任书
2014/07/25 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
毕业设计致谢语
2015/05/14 职场文书
叶问观后感
2015/06/15 职场文书