我正在尝试创建与tensorflow.compat.v1兼容的优化器,该优化器使用OptimizerV2作为基类,并在optimizer_v2.py中定义
Optimer类的经典keras版本更容易理解,例如在函数中
get_updates(self, loss, params):
您可以通过
进行确认param.name
当前正在分析哪一层。
相反,例如,在optimizer_v2中有函数
_resource_apply_dense(self, grad, var)
我尝试检查 var ,它有一个 .name 参数,但不是“唯一的”。我的意思是,例如,通过拥有一个名为 d 的最终Dense层,fit_generator的每一步调用两次带有 .name 的函数,该函数等于
d/kernel:0
d/bias:0
让我们说我只想为该密集层 d 更改动量或学习率,以下算法正确吗?
检查变量名称是否等于 d /内核:0 或 d /偏差:0 ,例如,执行< / p>
# Retrives the actual learning rate, dtype is a float32
lr_t = self._decayed_lr(var_dtype)
lr_t = lr_t * 1e-1
...
# If i want to apply the standard gradient_descent (same as the optimizer SGD)
return training_ops.resource_apply_gradient_descent(
var.handle, lr_t_updated, grad, use_locking=self._use_locking)
这是否仅对 d 层设置了学习速度,比其他层小10倍?