如何应用自定义渐变?

By simon at 7 天前 • 0人收藏 • 4人看过

完整的来源可以看到这里.

我想创建一个自定义层和应用自定义渐变。 完成之后,我检查了 grad func 是通过 optimizer. com pute gradients 运行的,但是自定义渐变似乎并不适用于最终的学习结果。

到目前为止,检查自定义渐变是否成功的方法是在运行优化器.com pute 渐变函数之前和之后比较值。 有人知道如何申请和验证吗?

我花了很多时间试图解决这个问题,但由于我的无知,我遇到了困难。

整体模式如下:

句子太长,请短一点

自定义渐变应用源是:

Def 编码层(x,d,k) : 全局批量大小批量大小。 作为 list ()[0] # init 码字和平滑因子(learnable parameters) stdout 11。 / ((k * d) * * (1 / 2))代码字苗条。 模型变量(名称'codewords',initializer tf.random uniform (shape (k,d) ,minval-stdout 1,maxval stdout 1) ,调节器 slim.l2调节器(0.05))缩小规模。 模型变量(名称'scale',initializer tf.random uniform (shape (k,) ,minval-1,maxval 0) ,reregularizer slim.l2 regularizer (0.05)) # BxHxWxD Bx (HW) xD (BxNxD) x tf。 (x,[-1,X.shape [1] * x. shape [2] ,X.shape [3] ,name'input') e encoding OP (python func,[ x,codewords,scale ] ,grad func,name OP name)返回 e def python func (inps,name None) : with tf。 Name scope (name) : x inps [0] c inps [1] s inps [2] forward func encoding (x,c,s) # victim op backward func,x,c,s tf. 单位元素 n ([ forward func,x,c,s ])返回向后的 func + tf。 Stop gradient (forward func-backward func) def encoding op (func,inp,grad,name None,victim op'IdentityN') : # 需要生成唯一名称以避免重复。 Rnd 命名为'my gradient'+ str (np.random.randint (0,1E + 8)) tf。 返回 func (inp,name) def 编码(x,c,s) :"': param x: : param c: : param s: : Return e (n 个残差编码向量,b x k x d)"'# forward logic... 返回 e # 自定义梯度 wrt 每个 op 输入。 Def grad func (op,gradE,tmp1,tmp2,tmp3) : x op.inputs [1] c op.inputs [2] s op.inputs [3] # 反向逻辑... 返回 None,GX,GC,GS-对吗?

我在等待那些能给我启迪的人。

提前谢谢你。

登录后方可回帖

Loading...