在Tensorflow中仅学习非零元素

时间:2018-07-25 10:55:32

标签: tensorflow machine-learning

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

1 个答案:

答案 0 :(得分:0)

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

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)