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

  

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

  

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

  

<强> 1。根据变量作用域剔除需要固定参数的变量

        def get_variable_via_scope (scope_lst):   var=[]   在scope_lst sc:   sc_variable=tf.get_collection (tf.GraphKeys.TRAINABLE_VARIABLES范围=范围)   vars.extend (sc_variable)   返回var      trainable_vars=tf.trainable_variables ()   no_change_scope=(“your_unchange_scope_name”)      no_change_vars=get_variable_via_scope (no_change_scope)      在no_change_vars v的:   trainable_vars.remove (v)      毕业生,_=特遣部队。trainable_vars梯度(损失)      优化器=tf.train.AdamOptimizer (lr)      train_op=优化器。trainable_vars apply_gradient (zip(毕业生),global_step=global_step)      

<强> 2。使用tf.stop_gradient()函数

  

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

  

<强> 3。一个矩阵中部分行或列参数更新

  

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

        进口tensorflow特遣部队   进口numpy np      面具def entry_stop_gradients(目标):   mask_h=tf.abs (mask-1)   返回特遣部队。stop_gradient (mask_h *目标)+面具*目标      掩码=np.array ([1。0 1 1 0 0,1,1,0,1])   mask_h=np.abs (mask-1)      emb=tf.constant (np。的((10、5)))      矩阵=entry_stop_gradients (emb tf.expand_dims(面具,1))      改=np.random。randn (5、1)   t_parm=tf.constant(改)      损失=tf.reduce_sum (tf。matmul(矩阵,t_parm))   grad1=特遣部队。梯度(损失、emb)   grad2=特遣部队。梯度(损失矩阵)   打印矩阵   与tf.Session税():   打印sess.run(损失)   打印sess.run ([grad1 grad2])      

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

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