我试图在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替换地板,然后将一个强制转换为浮动但同样的交易。
关于我能做什么的任何建议?
答案 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
获得签名功能。它输出一个浮点数或整数(取决于输入),用-1
或1
表示符号。但请注意tf.sign(0) == 0
!
对于硬限制激活功能,二进制阈值激活功能, Heaviside步骤功能,请参阅其他答案。