详解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中使用PyHook监听鼠标和键盘事件实例
Jul 18 Python
python创建进程fork用法
Jun 04 Python
Python使用urllib2模块抓取HTML页面资源的实例分享
May 03 Python
Python matplotlib绘图可视化知识点整理(小结)
Mar 16 Python
pycharm 主题theme设置调整仿sublime的方法
May 23 Python
详解Python安装tesserocr遇到的各种问题及解决办法
Mar 07 Python
使用python将多个excel文件合并到同一个文件的方法
Jul 09 Python
python-视频分帧&多帧合成视频实例
Dec 10 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
python实现udp聊天窗口
Mar 31 Python
python实现数字炸弹游戏
Jul 17 Python
Python如何利用正则表达式爬取网页信息及图片
Apr 17 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
收音机鉴频器对声音的影响和频偏分析
2021/03/02 无线电
解决MySQL中文输出变成问号的问题
2008/06/05 PHP
php中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
2017/05/20 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
2019/06/14 PHP
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
Bootstrap每天必学之进度条
2015/11/30 Javascript
JavaScript常用函数工具集:lao-utils
2016/03/01 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
JS访问DOM节点方法详解
2016/11/29 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
防止重复发送 Ajax 请求
2017/02/15 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
2017/03/01 Javascript
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
微信小程序wx:for循环的实例详解
2018/10/07 Javascript
vue实现文字横向无缝走马灯组件效果的实例代码
2019/04/09 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
python机器学习之随机森林(七)
2018/03/26 Python
Python用for循环实现九九乘法表
2018/05/31 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
Python绘制股票移动均线的实例
2019/08/24 Python
如何在Cookie里面保存Unicode和国际化字符
2013/05/25 面试题
linux面试题参考答案(9)
2015/01/07 面试题
致标枪运动员广播稿
2014/02/06 职场文书
大学新生入学教育方案
2014/05/16 职场文书
公民授权委托书
2014/10/15 职场文书
教师批评与自我批评剖析材料
2014/10/16 职场文书
酒店采购员岗位职责
2015/04/03 职场文书
2019财务毕业实习报告
2019/06/27 职场文书