您是否了解将Tensorflow或Keras约束为一组离散权重并使用离散/刚性激活函数(例如符号或硬度)的方法?
API似乎只有平滑的激活功能。
我还想到的是通过自定义正则化函数对权重进行离散化,但我不知道如何使框架考虑到这一点。
可能我必须扩展(例如)密集层类(相应框架)并定义自定义前向传播函数(及其衍生物)。你有这方面的例子吗?
答案 0 :(得分:1)
在我看来,改变重量和激活从平滑到离散的可能是Keras的一个大问题。我认为这种方法至少存在两个主要困难:
2^dimension
)。这些是解决您的问题可能非常困难的原因。
答案 1 :(得分:0)
使用功能组合可以在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来改变数据类型并适当地移位。所有这些功能都实现了渐变。
对于离散权重,我认为您可以在使用之前对权重应用适当的离散激活。这种方法适用于非负矩阵分解等问题,您可以使用整流线性单位将每个更新步骤中的负权重归零。