详解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 相关文章推荐
pymongo为mongodb数据库添加索引的方法
May 11 Python
python 实时遍历日志文件
Apr 12 Python
Python中顺序表的实现简单代码分享
Jan 09 Python
python实现自动发送邮件发送多人、群发、多附件的示例
Jan 23 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
Apr 17 Python
对python特殊函数 __call__()的使用详解
Jul 02 Python
pandas 选取行和列数据的方法详解
Aug 08 Python
Python数据持久化存储实现方法分析
Dec 21 Python
简单了解python字符串前面加r,u的含义
Dec 26 Python
详解Python中namedtuple的使用
Apr 27 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
Jan 19 Python
Django 实现jwt认证的示例
Apr 30 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 购物车的例子
2009/05/04 PHP
php实现遍历多维数组的方法
2015/11/25 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
多个iframe自动调整大小的问题
2006/09/18 Javascript
新浪的图片新闻效果
2007/01/13 Javascript
基于jquery的气泡提示效果
2010/05/31 Javascript
JavaScript中常用的运算符小结
2012/01/18 Javascript
javascript中普通函数的使用介绍
2013/12/19 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
Javascript中prototype的使用详解
2016/06/18 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
2017/01/05 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
Vue实现表格中对数据进行转换、处理的方法
2018/09/06 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
2018/12/05 Javascript
原生JS实现弹幕效果的简单操作指南
2020/11/10 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
python二分法实现实例
2013/11/21 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
python修改FTP服务器上的文件名
2019/09/11 Python
简单了解python数组的基本操作
2019/11/26 Python
pytorch实现seq2seq时对loss进行mask的方式
2020/02/18 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
2020/04/24 Python
Django静态资源部署404问题解决方案
2020/05/11 Python
通过python-pptx模块操作ppt文件的方法
2020/12/26 Python
高性能钓鱼服装:Huk Gear
2019/02/20 全球购物
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
介绍下Lucene建立索引的过程
2016/03/02 面试题
入学申请自荐信范文
2014/02/26 职场文书
建议书标准格式
2014/03/12 职场文书
市场营销毕业求职信
2014/08/07 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
无婚姻登记记录证明
2015/06/18 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书
HTML+JS实现在线朗读器
2022/02/15 Javascript