tensorflow finuetuning 例子
最近研究了下如何使用tensorflow进行finetuning,相比于caffe,tensorflow的finetuning麻烦一些,记录如下:
1.原理
finetuning原理很简单,利用一个在数据A集上已训练好的模型作为初始值,改变其部分结构,在另一数据集B上(采用小学习率)训练的过程叫做finetuning。
一般来讲,符合如下情况会采用finetuning
- 数据集A和B有相关性
- 数据集A较大
- 数据集B较小
2.关键代码
在数据集A上训练的时候,和普通的tensorflow训练过程完全一致。但是在数据集B上进行finetuning时,需要先从之前训练好的checkpoint中恢复模型参数,这个地方比较关键,
需要注意只恢复需要恢复的参数,其他参数不要恢复,否则会因为找不到的声明而报错。以mnist为例子,如果我想先训练一个0-7的8类分类器,网络结构如下:
conv1-conv2-fc8(其他不带权重的pooling、softmaxloss层忽略)
然后我想用这个训练出的模型参数,在0-9的10类分类器上做finetuning,网络结构如下:
conv1-conv2-fc10
那么在从checkpoint中恢复模型参数时,我只能恢复conv1-conv2,如果连fc8都恢复了,就会因为找不到fc8的定义而报错
以上描述对应的代码如下:
if tf.train.latest_checkpoint('ckpts') is not None:
trainable_vars = tf.trainable_variables()
res_vars = [t for t in trainable_vars if t.name.startswith('conv')]
saver = tf.train.Saver(var_list=res_vars)
saver.restore(sess, tf.train.latest_checkpoint('ckpts'))
else:
saver = tf.train.Saver()
3.demo
利用mnist写了一个简单的finetuning例子,大家可以试试,事实证明,利用一个相关的已有模型做finuetuning比从0开始训练收敛的更快并且收敛到的准确率更高,
tensorflow finuetuning 例子的更多相关文章
- 一个TensorFlow例子
一个TensorFlow的例子 import tensorflow as tf x = tf.constant(1.0, name='input') w = tf.Variable(0.8, name ...
- google tensorflow guide
# For CPU-only version $ pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow- ...
- 程序猿 tensorflow 入门开发及人工智能实战
tensorflow 中文文档: http://www.tensorfly.cn http://wiki.jikexueyuan.com/project/tensorflow-zh/ tensorfl ...
- tensorflow softmax应用
---恢复内容开始--- 1.softmax函数 2.tensorflow实现例子 #!/usr/bin/env python # -*- coding: utf-8 -*- import tenso ...
- tensorflow 从入门到上天教程一
tensorflow 是一个google开源的深度学习的框架,执行性能良好,值得使用. caffe,caffe2 通过配置就可以拼凑一个深度学习框架,大大简化流程但也依赖大量的开源库,性能也不错.20 ...
- Tensorflow-hub[例子解析1]
0. 引言 Tensorflow于1.7之后推出了tensorflow hub,其是一个适合于迁移学习的部分,主要通过将tensorflow的训练好的模型进行模块划分,并可以再次加以利用.不过介于推出 ...
- TensorFlow入门(五)多层 LSTM 通俗易懂版
欢迎转载,但请务必注明原文出处及作者信息. @author: huangyongye @creat_date: 2017-03-09 前言: 根据我本人学习 TensorFlow 实现 LSTM 的经 ...
- tensorflow项目构建流程
https://blog.csdn.net/hjimce/article/details/51899683 一.构建路线 个人感觉对于任何一个深度学习库,如mxnet.tensorflow.thean ...
- 跑对抗样本库 CleverHans 的例子时,遇到的问题
环境:Ubuntu+TensorFlow 首先是GPU被其他人占用了,怎么也跑不起来最简单的TensorFlow小例子. 所以先学会如何查看显卡使用情况,转去使用其他空闲显卡. Linux查看Nvid ...
随机推荐
- 封装、property特性及绑定与非绑定方法
1.封装 (1)什么是封装? 封:属性对外是隐藏的,但对内是开放的: 装:申请一个名称空间,往里面装入一系列名字/属性 (2)为什么要封装? 封装数据属性的目的 首先定义属性的目的就是为了给类外部的使 ...
- 编程菜鸟的日记-初学尝试编程-寻找等长数组A与B(所含元素相同,顺序不同)相匹配的元素即a[i]=b[j]
#include <iostream> using namespace std; void matching(int a[],int b[],int N) { int i=0; while ...
- Navicat Premium for Mac的破解教程
Navicat Premium for Mac破解教程 https://www.jianshu.com/p/f3ef78deadaa 时间戳: https://tool.lu/timest ...
- 2018-8-16JWTtoken用户登录认证思路分析9502751
2018-8-16JWTtoken用户登录认证思路分析9502751 JWT token在商城中的实现 class UserView(CreateAPIView): serializer_class ...
- HTML5 学习04—— MathML数学标记
MathML 元素标签: <math>...</math> MathML 是数学标记语言,是一种基于XML(标准通用标记语言的子集)的标准,用来在互联网上书写数学符号和公式的置 ...
- ASP.NET Core托管和部署Linux实操演练手册
一.课程介绍 ASP.NET Core 是一种全新的跨平台开源 .NET 框架,能够在 IIS.Nginx.Apache.Docker 上进行托管或在自己的进程中进行自托管. 作为一个.NET Web ...
- ES5, ES6, ES2016, ES.Next: What's going on with JavaScript versioning?
JavaScript has a strange naming history. For its initial release in 1995 as part of Netscape Navigat ...
- 转: linux centos7 下安装maven
转: https://www.tecmint.com/install-apache-maven-on-centos-7/
- [Vuex] Split Vuex Store into Modules using TypeScript
When the Vuex store grows, it can have many mutations, actions and getters, belonging to different c ...
- 【问题与解决】怎么删除TFS云端上的项目
最近使用了Visual Stuidio提供的网络项目管理,感觉跟visual stuido结合起来还是很好用的,新建项目很简单,但是在删除项目的时候就没有那么简单了,直接通过VS的团队管理删除还会报错 ...