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实现udp数据报传输的方法
Sep 26 Python
Python常用随机数与随机字符串方法实例
Apr 09 Python
正确理解python中的关键字“with”与上下文管理器
Apr 21 Python
详解python基础之while循环及if判断
Aug 24 Python
pycharm 解除默认unittest模式的方法
Nov 30 Python
Python递归函数实例讲解
Feb 27 Python
Python检测数据类型的方法总结
May 20 Python
浅谈Python 敏感词过滤的实现
Aug 15 Python
python中的TCP(传输控制协议)用法实例分析
Nov 15 Python
Python实现序列化及csv文件读取
Jan 19 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
Jun 11 Python
python实现画图工具
Aug 27 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
最小化数据传输――在客户端存储数据
2006/10/09 PHP
无限级别菜单的实现
2006/10/09 PHP
php4的彩蛋
2006/10/09 PHP
PHP中simplexml_load_string函数使用说明
2011/01/01 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
2013/06/26 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
javascript中删除指定数组中指定的元素的代码
2011/02/12 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
2013/01/11 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
JavaScript中Object.prototype.toString方法的原理
2016/02/24 Javascript
JS实现设置ff与ie元素绝对位置的方法
2016/03/08 Javascript
jQuery实现为LI列表前3行设置样式的方法【2种方法】
2016/09/04 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
浅析node.js的模块加载机制
2018/05/25 Javascript
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
Tensorflow简单验证码识别应用
2017/05/25 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
如何用python整理附件
2018/05/13 Python
python 读取txt,json和hdf5文件的实例
2018/06/05 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
Python hmac模块使用实例解析
2019/12/24 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
Python自动创建Excel并获取内容
2020/09/16 Python
Python接口自动化测试框架运行原理及流程
2020/11/30 Python
自我鉴定怎么写
2014/01/12 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
2015年复活节活动总结
2015/02/27 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
社区志愿者服务心得体会
2016/01/22 职场文书
vue+elementui 实现新增和修改共用一个弹框的完整代码
2021/06/08 Vue.js
Flutter集成高德地图并添加自定义Maker的实践
2022/04/07 Java/Android