TensorFlow中的硬限制/阈值激活功能

时间:2016-06-10 08:33:29

标签: python python-3.x tensorflow

我试图在TensorFlow 0.9中实现基本的二进制Hopfield Network。不幸的是,我很难让激活功能正常工作。我希望得到非常简单的If net[i] < 0, output[i] = 0, else output[i] = 1,但我尝试的所有内容似乎都删除了渐变,即我得到了#34;没有为任何变量提供渐变&#34;尝试实施培训时的例外情况。

例如,我尝试将tf.less()投射到float,我尝试按照

的方式进行操作
tf.maximum(tf.minimum(net, 0) + 1, 0)

但我忘了小小数值。最后我做了

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

tf.floor没有注册渐变。我也尝试用一个强制转换为int替换地板,然后将一个强制转换为浮动但同样的交易。

关于我能做什么的任何建议?

2 个答案:

答案 0 :(得分:10)

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

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是张量

答案 1 :(得分:3)

只是为了记录,可以通过tf.sign获得签名功能。它输出一个浮点数或整数(取决于输入),用-11表示符号。但请注意tf.sign(0) == 0

对于硬限制激活功能二进制阈值激活功能 Heaviside步骤功能,请参阅其他答案。