tensorflow 恢复指定层与不同层指定不同学习率的方法


Posted in Python onJuly 26, 2018

如下所示:

#tensorflow 中从ckpt文件中恢复指定的层或将指定的层不进行恢复:
#tensorflow 中不同的layer指定不同的学习率
 
with tf.Graph().as_default():
		#存放的是需要恢复的层参数
	 variables_to_restore = []
	 #存放的是需要训练的层参数名,这里是没恢复的需要进行重新训练,实际上恢复了的参数也可以训练
  variables_to_train = []
  for var in slim.get_model_variables():
   excluded = False
   for exclusion in fine_tune_layers:
   #比如fine tune layer中包含logits,bottleneck
    if var.op.name.startswith(exclusion):
     excluded = True
     break
   if not excluded:
    variables_to_restore.append(var)
    #print('var to restore :',var)
   else:
    variables_to_train.append(var)
    #print('var to train: ',var)
 
 
  #这里省略掉一些步骤,进入训练步骤:
  #将variables_to_train,需要训练的参数给optimizer 的compute_gradients函数
  grads = opt.compute_gradients(total_loss, variables_to_train)
  #这个函数将只计算variables_to_train中的梯度
  #然后将梯度进行应用:
  apply_gradient_op = opt.apply_gradients(grads, global_step=global_step)
  #也可以直接调用opt.minimize(total_loss,variables_to_train)
  #minimize只是将compute_gradients与apply_gradients封装成了一个函数,实际上还是调用的这两个函数
  #如果在梯度里面不同的参数需要不同的学习率,那么可以:
 
  capped_grads_and_vars = []#[(MyCapper(gv[0]), gv[1]) for gv in grads_and_vars]
  #update_gradient_vars是需要更新的参数,使用的是全局学习率
  #对于不是update_gradient_vars的参数,将其梯度更新乘以0.0001,使用基本上不动
 	for grad in grads:
 		for update_vars in update_gradient_vars:
 			if grad[1]==update_vars:
 				capped_grads_and_vars.append((grad[0],grad[1]))
 			else:
 				capped_grads_and_vars.append((0.0001*grad[0],grad[1]))
 
 	apply_gradient_op = opt.apply_gradients(capped_grads_and_vars, global_step=global_step)
 
 	#在恢复模型时:
 
  with sess.as_default():
 
   if pretrained_model:
    print('Restoring pretrained model: %s' % pretrained_model)
    init_fn = slim.assign_from_checkpoint_fn(
    pretrained_model,
    variables_to_restore)
    init_fn(sess)
   #这样就将指定的层参数没有恢复

以上这篇tensorflow 恢复指定层与不同层指定不同学习率的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python下rrdtool模块的基本使用方法
Nov 13 Python
Python递归实现汉诺塔算法示例
Mar 19 Python
Python迭代器定义与简单用法分析
Apr 30 Python
Python实现的特征提取操作示例
Dec 03 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
Mar 14 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
Apr 10 Python
150行python代码实现贪吃蛇游戏
Apr 24 Python
python可以用哪些数据库
Jun 22 Python
Python3爬虫中Ajax的用法
Jul 10 Python
Python高并发解决方案实现过程详解
Jul 31 Python
Python logging模块进行封装实现原理解析
Aug 07 Python
Python字典dict常用方法函数实例
Nov 09 Python
kaggle+mnist实现手写字体识别
Jul 26 #Python
解决tensorflow模型参数保存和加载的问题
Jul 26 #Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
Jul 26 #Python
Flask web开发处理POST请求实现(登录案例)
Jul 26 #Python
基于tensorflow加载部分层的方法
Jul 26 #Python
利用python画出折线图
Jul 26 #Python
浅谈flask源码之请求过程
Jul 26 #Python
You might like
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
图像替换新技术 状态域方法
2010/01/28 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
两个select多选模式的选项相互移动(示例代码)
2014/01/11 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
利用JQuery直接调用asp.net后台的简单方法
2016/10/27 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
使用vue制作滑动标签
2019/09/21 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
python 从文件夹抽取图片另存的方法
2018/12/04 Python
pycharm显示远程图片的实现
2019/11/04 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
python 利用百度API识别图片文字(多线程版)
2020/12/14 Python
美国真皮手袋品牌:GiGi New York
2017/03/10 全球购物
普通话演讲稿
2014/09/03 职场文书
刑事代理授权委托书
2014/09/17 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
党支部工作总结2015
2015/04/01 职场文书
西安事变观后感
2015/06/12 职场文书
欢迎新生标语2015
2015/07/16 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers