Tensorflow实现部分参数梯度更新操作


Posted in Python onJanuary 23, 2020

在深度学习中,迁移学习经常被使用,在大数据集上预训练的模型迁移到特定的任务,往往需要保持模型参数不变,而微调与任务相关的模型层。

本文主要介绍,使用tensorflow部分更新模型参数的方法。

1. 根据Variable scope剔除需要固定参数的变量

def get_variable_via_scope(scope_lst):
  vars = []
  for sc in scope_lst:
    sc_variable = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES,scope=scope)
    vars.extend(sc_variable)
  return vars
 
trainable_vars = tf.trainable_variables()
no_change_scope = ['your_unchange_scope_name']
 
no_change_vars = get_variable_via_scope(no_change_scope)
 
for v in no_change_vars:
  trainable_vars.remove(v)
 
grads, _ = tf.gradients(loss, trainable_vars)
 
optimizer = tf.train.AdamOptimizer(lr)
 
train_op = optimizer.apply_gradient(zip(grads, trainable_vars), global_step=global_step)

2. 使用tf.stop_gradient()函数

在建立Graph过程中使用该函数,非常简洁地避免了使用scope获取参数

3. 一个矩阵中部分行或列参数更新

如果一个矩阵,只有部分行或列需要更新参数,其它保持不变,该场景很常见,例如word embedding中,一些预定义的领域相关词保持不变(使用领域相关word embedding初始化),而另一些通用词变化。

import tensorflow as tf
import numpy as np
 
def entry_stop_gradients(target, mask):
  mask_h = tf.abs(mask-1)
  return tf.stop_gradient(mask_h * target) + mask * target
 
mask = np.array([1., 0, 1, 1, 0, 0, 1, 1, 0, 1])
mask_h = np.abs(mask-1)
 
emb = tf.constant(np.ones([10, 5]))
 
matrix = entry_stop_gradients(emb, tf.expand_dims(mask,1))
 
parm = np.random.randn(5, 1)
t_parm = tf.constant(parm)
 
loss = tf.reduce_sum(tf.matmul(matrix, t_parm))
grad1 = tf.gradients(loss, emb)
grad2 = tf.gradients(loss, matrix)
print matrix
with tf.Session() as sess:
  print sess.run(loss)
  print sess.run([grad1, grad2])

以上这篇Tensorflow实现部分参数梯度更新操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python通过pil模块获得图片exif信息的方法
Mar 16 Python
Python中下划线的使用方法
Mar 27 Python
详解Python 协程的详细用法使用和例子
Jun 15 Python
详解django+django-celery+celery的整合实战
Mar 19 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
Python 求数组局部最大值的实例
Nov 26 Python
Python with标签使用方法解析
Jan 17 Python
关于tf.nn.dynamic_rnn返回值详解
Jan 20 Python
Python3实现飞机大战游戏
Apr 24 Python
Python自省及反射原理实例详解
Jul 06 Python
Python2及Python3如何实现兼容切换
Sep 01 Python
python垃圾回收机制原理分析
Apr 13 Python
将tensorflow模型打包成PB文件及PB文件读取方式
Jan 23 #Python
使用tensorflow显示pb模型的所有网络结点方式
Jan 23 #Python
tensorflow 实现打印pb模型的所有节点
Jan 23 #Python
TensorFlow命名空间和TensorBoard图节点实例
Jan 23 #Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
Jan 23 #Python
如何定义TensorFlow输入节点
Jan 23 #Python
django 文件上传功能的相关实例代码(简单易懂)
Jan 22 #Python
You might like
PHP经典的给图片加水印程序
2006/12/06 PHP
用PHP 快速生成 Flash 动画的方法
2007/03/06 PHP
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
php生成图片缩略图的方法
2015/04/07 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
2015/06/17 PHP
php使用socket调用http和smtp协议实例小结
2019/07/26 PHP
JQuery从头学起第三讲
2010/07/06 Javascript
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
js中的布尔运算符使用介绍
2013/11/20 Javascript
jQuery 复合选择器应用的几个例子
2014/09/11 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
javascript实现window.print()去除页眉页脚
2014/12/30 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
关于axios返回空对象的问题解决
2017/04/04 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
2017/11/11 jQuery
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
使用typescript改造koa开发框架的实现
2020/02/04 Javascript
小程序实现tab标签页
2020/11/16 Javascript
ES6 十大特性简介
2020/12/09 Javascript
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
python 迭代器和iter()函数详解及实例
2017/03/21 Python
python中利用zfill方法自动给数字前面补0
2018/04/10 Python
基于pandas数据样本行列选取的方法
2018/04/20 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
2021/02/24 HTML / CSS
物流管理专业毕业生自荐信
2014/03/04 职场文书
高中美术教师事迹材料
2014/08/22 职场文书
政风行风评议整改方案
2014/09/15 职场文书
出纳工作检讨书
2014/10/18 职场文书
先进典型发言材料
2014/12/30 职场文书
员工开除通知书
2015/04/25 职场文书
葬礼主持词
2015/07/02 职场文书
Python的三个重要函数详解
2022/01/18 Python
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript