首页 > 解决方案 > 只学习 Tensorflow 中的非零元素

问题描述

对于一个项目,我只想与特定数量的神经元而不是完全连接的层建立连接。为了实现这一点,我创建了一个类似掩码的权重初始化,其中我将不需要的连接设置为 0,通过使用 matmul 我可以实现我的目标,但我现在遇到的问题是我希望这些连接不参与学习过程以及(例如,零连接保持为零,并且不会妨碍学习非零元素)。有关如何解决此问题的任何建议?

标签: tensorflowmachine-learning

解决方案


您可以通过在应用渐变之前手动重置渐变来实现。替换通常的优化操作,如:

optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)

手动梯度计算和应用:

grads = tf.gradients(loss, ['name-of-your-neurons-variable'])
#  ... here put code for gradient resetting using the mask
grads_and_vars = list(zip(grads, ['name-of-your-neurons-variable']))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train_op = optimizer.apply_gradients(grads_and_vars)

推荐阅读