详解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代码实现KNN算法
Dec 20 Python
Python GUI布局尺寸适配方法
Oct 11 Python
Python对象中__del__方法起作用的条件详解
Nov 01 Python
numpy 计算两个数组重复程度的方法
Nov 07 Python
pygame游戏之旅 添加游戏暂停功能
Nov 21 Python
在Python 中同一个类两个函数间变量的调用方法
Jan 31 Python
pandas计算最大连续间隔的方法
Jul 04 Python
python装饰器练习题及答案
Nov 01 Python
用python3读取python2的pickle数据方式
Dec 25 Python
python如何使用腾讯云发送短信
Sep 17 Python
Python数据可视化之绘制柱状图和条形图
May 25 Python
Python中使用tkFileDialog实现文件选择、保存和路径选择
May 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与javascript的两种交互方式
2006/10/09 PHP
PHP与SQL注入攻击[三]
2007/04/17 PHP
支持中文的php加密解密类代码
2011/11/27 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
php和html的区别点详细总结
2019/09/24 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
javascript倒计时效果实现
2015/11/12 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
深入理解关于javascript中apply()和call()方法的区别
2016/04/12 Javascript
bootstrap table动态加载数据示例代码
2017/03/25 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
vue数据更新UI不刷新显示的解决办法
2020/08/06 Javascript
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
pyqt4教程之实现windows窗口小示例分享
2014/03/07 Python
Python中apply函数的用法实例教程
2014/07/31 Python
浅析Python的Django框架中的Memcached
2015/07/23 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
NBA德国官方网上商店:NBA Store德国
2018/04/13 全球购物
C语言笔试题回忆
2015/04/02 面试题
祖国在我心中演讲稿600字
2014/05/04 职场文书
民主生活会整改措施(党员)
2014/09/18 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
河童之夏观后感
2015/06/11 职场文书
2015年环境监察工作总结
2015/07/23 职场文书
谢师宴学生答谢词
2015/09/30 职场文书
技术入股协议书
2016/03/22 职场文书
nginx+lua单机上万并发的实现
2021/05/31 Servers
MySQL数据库中的锁、解锁以及删除事务
2022/05/06 MySQL
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers