我希望针对TensorFlow中的非零参数计算损失函数的梯度。与内置优化器(例如tf.GradientDescentOptimizer
)相反。我也希望执行更新-因此使用
tf.compute_gradients()
或tf.gradients(loss, params)
。
我尝试使用以下链接中提供的方法: TensorFlow - How to compute gradient while ignoring zero weights? 但无法将其添加到我的代码中。我的代码段如下:
def myupdatefunction(loss, params, learning_rate, epochs, feed_dict):
grad_vars = tf.gradients(loss, params)
params_new = params.assign_sub(params, learning_rate * grad_vars)
session = tf.Session()
for _ in range(epochs):
session.run(params_new, feed_dict)
params_upd = applysomeCondition(params)
params_zero = tf.where(tf.equal(params_upd, 0))
params.assign(params_upd)
session.close()
我希望了解如何将params_upd
传递给tf.gradients(loss, params_upd)
,以便在后续更新期间可以识别和忽略params_zero
。有没有办法掩盖params_upd
对应于params_zero?