详解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的Flask框架中验证注册用户的Email的方法
Sep 02 Python
python画一个玫瑰和一个爱心
Aug 18 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
Sep 11 Python
wxPython绘图模块wxPyPlot实现数据可视化
Nov 19 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
Mar 10 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
Mar 20 Python
详解Python中namedtuple的使用
Apr 27 Python
PyQt5的相对布局管理的实现
Aug 07 Python
python3处理word文档实例分析
Dec 01 Python
Python爬虫之Selenium警告框(弹窗)处理
Dec 04 Python
jupyter notebook远程访问不了的问题解决方法
Jan 11 Python
python实现b站直播自动发送弹幕功能
Feb 20 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中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
2011/03/23 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
javascript 仿QQ滑动菜单效果代码
2010/09/03 Javascript
深入理解JavaScript系列(4) 立即调用的函数表达式
2012/01/15 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
深入理解JavaScript的React框架的原理
2015/07/02 Javascript
jquery中validate与form插件提交的方式小结
2016/03/26 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
2016/11/15 Javascript
js实现获取鼠标当前的位置
2016/12/14 Javascript
jQuery实现的无缝广告图片左右滚动功能详解
2016/12/24 Javascript
ztree实现权限横向显示功能
2017/05/20 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
vue插件实现v-model功能
2018/09/10 Javascript
简单说说如何使用vue-router插件的方法
2019/04/08 Javascript
JavaScript强制类型转换和隐式类型转换操作示例
2019/05/01 Javascript
JavaScript基于SVG的图片切换效果实例代码
2020/12/15 Javascript
Python探索之Metaclass初步了解
2017/10/28 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
使用OpCode绕过Python沙箱的方法详解
2019/09/03 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
在python里创建一个任务(Task)实例
2020/04/25 Python
Python网页解析器使用实例详解
2020/05/30 Python
Python实现进度条和时间预估的示例代码
2020/06/02 Python
Python基于字典实现switch case函数调用
2020/07/22 Python
Python爬虫与反爬虫大战
2020/07/30 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
职工运动会感言
2014/02/07 职场文书
团日活动总结
2014/04/28 职场文书
年度安全生产目标责任书
2014/07/23 职场文书
初婚初育证明范本
2014/11/24 职场文书
南极大冒险观后感
2015/06/05 职场文书
国际最新研究在陨石中发现DNA主要成分 或由陨石带来地球
2022/04/29 数码科技