Tensorflow中的神经元冻结

时间:2018-10-15 10:41:05

标签: python tensorflow deep-learning

我需要在CNN中实施神经元冻结以便进行深度学习研究, 我试图在Tensorflow文档中找到任何函数,但没有找到任何东西。 当我使用tf.nn.conv2d实现各层时,如何冻结特定的神经元?

2 个答案:

答案 0 :(得分:0)

正如评论中所阐明的,您希望冻结tf.nn.conv2d卷积中的Neurons。虽然在Tensorflow中有直接的方法(根据我的搜索),但是您可以尝试切片Tensor并对其应用tf.stop_gradient()。这是一个stackoverflow answer,可让您直观地了解如何使用tf.stop_gradient()

我还没有测试过,但是根据docs,我认为它应该可以工作。

答案 1 :(得分:0)

密集神经网络层中的神经元仅对应于权重矩阵中的一列。因此,您可以将权重矩阵重新定义为2个零件/变量的串联,一个是可训练的,另一个不是。然后您可以:

  1. 仅在优化程序的var_list函数的minimize参数的tf.stop_gradient参数中传递可训练的部分,或者
  2. 在要冻结的神经元对应的向量/列上使用select a.doctor_id , count(*) - 1 from doctor_record a left join doctor_record b on a.medical_school_id = b.medical_school_id and a.graduation_dt = b.graduation_dt group by a.doctor_id

相同的概念可以用于卷积层,尽管在这种情况下“神经元”的定义变得不清楚。您仍然可以冻结卷积内核的任何列。