我试图在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替换地板,但还是一样。
对我能做什么有什么建议吗?
有点晚了,但如果有人需要的话,我用这个定义
x是张量
为了便于记录,可以通过
tf.sign
获得符号函数。它输出一个浮点或整数(取决于输入),用-1
或1
表示符号。但是,请注意tf.sign(0) == 0
!对于硬限制激活函数,二值阈值激活函数,重频阶跃函数,请参见另一个答案。
相关问题 更多 >
编程相关推荐