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

Chr*_*man 4 python python-3.x tensorflow

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

例如,我试图铸造tf.less()float,我试图做的线沿线的东西

tf.maximum(tf.minimum(net, 0) + 1, 0)
Run Code Online (Sandbox Code Playgroud)

但我忘了小小数值.最后我做到了

tf.maximum(tf.floor(tf.minimum(net, 0) + 1), 0)
Run Code Online (Sandbox Code Playgroud)

tf.floor不记录渐变.我也尝试用一个强制转换为int替换地板,然后一个强制转换为浮动但同样的交易.

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

小智 11

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

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
Run Code Online (Sandbox Code Playgroud)

x是张量


Len*_*oyt 5

只是为了记录在案,可以得到符号函数通过tf.sign。它输出一个浮点数或整数(取决于输入)用-1或指示符号1。但是,请注意tf.sign(0) == 0

对于硬限制激活函数二元阈值激活函数Heaviside 阶跃函数,请参阅其他答案。