【问题标题】:Fixing a subset of weights in Neural network during training在训练期间修复神经网络中的权重子集
【发布时间】:2017-10-06 16:37:39
【问题描述】:

我正在考虑创建一个定制的神经网络。基本结构和往常一样,但我想截断层之间的连接。例如,如果我构建一个包含两个隐藏层的网络,我想删除一些权重并保留其他权重,如下所示:

这不是传统的dropout(以避免过度拟合),因为应该指定和固定剩余的权重(连接)。

在python中有没有办法做到这一点? TensorFlow、pytorch、theano 还是其他模块?

【问题讨论】:

标签: python tensorflow theano pycaffe pytorch


【解决方案1】:

是的,你可以在 tensorflow 中做到这一点。

你的 tensorflow 代码中会有一些类似这样的层:

m = tf.Variable( [width,height] , dtype=tf.float32  ))
b = tf.Variable( [height] , dtype=tf.float32  ))
h = tf.sigmoid( tf.matmul( x,m ) + b )

你想要的是一些新的矩阵,我们称它为 k 表示 kill。它会杀死特定的神经连接。神经连接在 m 中定义。这将是您的新配置

k = tf.Constant( kill_matrix , dtype=tf.float32 )
m = tf.Variable( [width,height] , dtype=tf.float32  )
b = tf.Variable( [height] , dtype=tf.float32  )
h = tf.sigmoid( tf.matmul( x, tf.multiply(m,k) ) + b )

你的 kill_matrix 是一个 1 和 0 的矩阵。为每个要保留的神经连接插入 1,为每个要杀死的神经连接插入 0。

【讨论】:

  • 谢谢。杀伤矩阵看起来不错。它启发了我。我会试试的。
  • 我可以再问一个问题吗?这种修改会影响优化器,比如 Adam?据我了解,我们使用反向传播来更新权重。现在我们截断连接,反向传播是否会更新被杀死的权重,这对前馈过程没有影响。或者我可以将此操作解释为会发生更新但对前馈处理没有影响。
  • 接下来,为了清楚起见,也许应该将 kill layer 称为 gate layersuppress layer。要回答您关于 Adam(或任何其他优化器)的问题,答案是 这不会对优化器产生负面影响抑制层将使用抑制(或杀死)连接来抑制前馈和反向传播步骤。
猜你喜欢
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
  • 2018-03-16
  • 2011-04-07
  • 1970-01-01
  • 2010-11-20
相关资源
最近更新 更多