TensorF中的硬极限/阈值激活函数

2024-06-15 09:09:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在TensorFlow 0.9中实现一个基本的二进制Hopfield Network。不幸的是,我很难让激活功能工作。我希望得到非常简单的If net[i] < 0, output[i] = 0, else output[i] = 1,但我尝试过的所有操作似乎都删除了渐变,即在尝试实现训练操作时,出现“没有为任何变量提供渐变”异常

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

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

但是我忘记了小的十进制值。我终于做到了

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

但是tf.floor不记录梯度。我还试着用一个cast to int替换地板,然后用一个cast back to float替换地板,但还是一样。

对我能做什么有什么建议吗?


Tags: to功能outputnettftensorflow二进制network
2条回答

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

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

对于硬限制激活函数,二值阈值激活函数重频阶跃函数,请参见另一个答案。

相关问题 更多 >