TensorFlow 中的硬限制/阈值激活函数

Hard limiting / threshold activation function in TensorFlow

我正在尝试在 TensorFlow 0.9 中实现基本的二进制 Hopfield Network。不幸的是,我很难让激活功能正常工作。我正在寻找非常简单的 If net[i] < 0, output[i] = 0, else output[i] = 1 但我尝试过的一切似乎都消除了梯度,即我在尝试实现训练操作时得到 "No gradients provided for any variable" 异常。

例如,我尝试将 tf.less() 转换为 float,我尝试按照

的方式做一些事情
tf.maximum(tf.minimum(net, 0) + 1, 0)

但我忘记了小数值。我终于做到了

tf.maximum(tf.floor(tf.minimum(net, 0) + 1), 0)

tf.floor 不注册渐变。我还尝试用转换为 int 的方式替换 floor,然后再转换回 float 但同样的处理。

对我可以做什么有什么建议吗?

有点晚了,但是如果有人需要的话,我用这个定义

def binary_activation(x):

    cond = tf.less(x, tf.zeros(tf.shape(x)))
    out = tf.where(cond, tf.zeros(tf.shape(x)), tf.ones(tf.shape(x)))

    return out

x 是张量

仅作记录,可以通过tf.sign获得符号函数。它输出一个浮点数或整数(取决于输入),用 -11 表示符号。但是,请注意 tf.sign(0) == 0!

对于硬限制激活函数二元阈值激活函数Heaviside阶跃函数 , 见其他回答