python - TensorFlow - 如何在忽略零权重的情况下计算梯度?
问题描述
我想通过将一些权重设置为 0.0(每层中的特定权重,以此处不重要讨论的方式选择)来实现修剪,以(1)在推理期间忽略它们,(2)在训练期间忽略它们。
我知道我可以在推理过程中通过对每一层应用掩码来忽略它们,在我想要保留的权重索引处使用掩码,否则为零。
然而,在训练期间,我希望忽略的权重仍然被忽略。也就是说,我希望它们(1)不被更新,(2)不影响其余梯度的计算。
我可以通过在应用渐变之前屏蔽渐变来做到(1)。但我做不到(2)。
我试过这样的事情:
# Create an optimizer.
opt = GradientDescentOptimizer(learning_rate=0.1)
# Compute the gradients for a list of variables.
# This returns a list of tuples, each tuple containing gradients and
# the corresponding variable
[(var, grad)] = opt.compute_gradients(loss)
# Ask the optimizer to apply the capped gradients.
train_op = optimizer.apply_gradients([(grad * mask, var)])
但这并不能满足我的要求,因为optimizer.compute_gradients(loss)
它将根据所有权重计算损失,包括那些为零的权重。换句话说,grad
将有一些梯度对应于权重为零的索引。应用掩码会“浪费”这些本应用于更新非零权重的梯度。
我希望它根据非零权重计算损失。
有任何想法吗?
解决方案
推荐阅读
- linux - 如何将 .sh 脚本文件名循环到 .txt?
- java - 如何让 KeyListener 与 JOGL 一起正常工作?
- git - 删除通过将名称更改为另一个提交而创建的提交
- android - 房间迁移添加列的值取决于现有的
- multithreading - 如何从另一个使线程启动 GUI 的应用程序更新 TextArea?
- javascript - 为什么我的变量在更改另一个变量的显示后变得未定义?
- css - 使用 Bootstrap col-md-4 网格,但它会中断
- php - 使用另一个多维关联数组对一个多维关联数组中的值进行计数或求和
- javascript - 在jQuery中动态选择一个特定的复选框
- android - 如何用按钮和文本实现动态线性布局?