TensorFlow 中的硬限制/阈值激活函数
Hard limiting / threshold activation function in TensorFlow
我正在尝试在 TensorFlow 0.9 中实现基本的二进制 Hopfield Network。不幸的是,我很难让激活功能正常工作。我正在寻找非常简单的 If net[i] < 0, output[i] = 0, else output[i] = 1
但我尝试过的一切似乎都消除了梯度,即我在尝试实现训练操作时得到 "No gradients provided for any variable" 异常。
例如,我尝试将 tf.less()
转换为 float
,我尝试按照
的方式做一些事情
tf.maximum(tf.minimum(net, 0) + 1, 0)
但我忘记了小数值。我终于做到了
tf.maximum(tf.floor(tf.minimum(net, 0) + 1), 0)
但 tf.floor
不注册渐变。我还尝试用转换为 int 的方式替换 floor,然后再转换回 float 但同样的处理。
对我可以做什么有什么建议吗?
有点晚了,但是如果有人需要的话,我用这个定义
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
获得符号函数。它输出一个浮点数或整数(取决于输入),用 -1
或 1
表示符号。但是,请注意 tf.sign(0) == 0
!
对于硬限制激活函数、二元阈值激活函数、Heaviside阶跃函数 , 见其他回答
我正在尝试在 TensorFlow 0.9 中实现基本的二进制 Hopfield Network。不幸的是,我很难让激活功能正常工作。我正在寻找非常简单的 If net[i] < 0, output[i] = 0, else output[i] = 1
但我尝试过的一切似乎都消除了梯度,即我在尝试实现训练操作时得到 "No gradients provided for any variable" 异常。
例如,我尝试将 tf.less()
转换为 float
,我尝试按照
tf.maximum(tf.minimum(net, 0) + 1, 0)
但我忘记了小数值。我终于做到了
tf.maximum(tf.floor(tf.minimum(net, 0) + 1), 0)
但 tf.floor
不注册渐变。我还尝试用转换为 int 的方式替换 floor,然后再转换回 float 但同样的处理。
对我可以做什么有什么建议吗?
有点晚了,但是如果有人需要的话,我用这个定义
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
获得符号函数。它输出一个浮点数或整数(取决于输入),用 -1
或 1
表示符号。但是,请注意 tf.sign(0) == 0
!
对于硬限制激活函数、二元阈值激活函数、Heaviside阶跃函数 , 见其他回答