您是否知道将tensorflow或keras约束为一组离散权重并使用离散/刚性激活函数(例如sign或hard-tanh)的方法?
API似乎只有平滑的激活功能。
我还考虑了通过自定义正则化函数对权重进行离散化,但我不知道如何让框架考虑到这一点。
可能我将不得不扩展(例如)(相应框架的)密集层类,并定义一个自定义的前向传播函数(及其派生函数)。你有这方面的例子吗?
发布于 2016-05-22 21:48:35
在我看来,在Keras中,将权重和激活从平滑到离散可能是一个巨大的问题。我认为这种方法至少有两个主要困难:
2^dimension).这些就是为什么你的问题可能真的很难解决的原因。
发布于 2016-08-10 08:59:03
在Tensorflow中,可以使用多种函数组合来激活或执行更多操作。对于您引用的两个示例:
zero = tf.constant(0)
one = tf.constant(1)
neg_one = tf.constant(-1)
hard_tanh(x) = tf.minimum(tf.maximum(x, neg_one), one))
sign(x) = tf.greater(x, zero)请注意,后者返回一个布尔张量,因此如果需要1和0或1和-1,则可以使用tf.cast更改数据类型并进行适当的移位。所有这些函数都实现了渐变。
对于离散权重,我认为您可以在使用权重之前对其应用适当的离散激活。这种方法适用于非负矩阵分解,即在每个更新步骤中使用校正的线性单元将负权重置零。
https://stackoverflow.com/questions/37341229
复制相似问题