【发布时间】:2016-07-12 10:42:47
【问题描述】:
我想为我创建的自定义模型学习最佳 weights 和 exponents:
weights = tf.Variable(tf.zeros([t.num_features, 1], dtype=tf.float64))
exponents = tf.Variable(tf.ones([t.num_features, 1], dtype=tf.float64))
# works fine:
pred = tf.matmul(x, weights)
# doesn't work:
x_to_exponent = tf.mul(tf.sign(x), tf.pow(tf.abs(x), tf.transpose(exponents)))
pred = tf.matmul(x_to_exponent, weights)
cost_function = tf.reduce_mean(tf.abs(pred-y_))
optimizer = tf.train.GradientDescentOptimizer(t.LEARNING_RATE).minimize(cost_function)
问题在于,只要x 中有一个负值 零,优化器就会将权重返回为NaN。如果我在 x = 0 时简单地添加 0.0001,那么一切都会按预期工作。但我真的必须这样做吗? TensorFlow 优化器不应该有办法处理这个吗?
我注意到维基百科没有显示 activation functions 其中 x 被取为指数。为什么没有如下图所示的激活函数?
对于上面的图像,我希望我的程序知道正确的指数是 0.5。
【问题讨论】:
-
您确定要将权重设为指数吗?这很容易达到无穷大。请也包含您的整个代码。
-
是的——我想知道为了做出正确的预测,我必须将输入数据采用什么指数。指数通常在 0-1 之间,所以不应该无穷大。例如,如果上面的图像是我们试图预测的模型,我们需要学习的正确指数是 0.5。
-
@lejlot 我已经更新了代码以更清楚地显示哪些有效,哪些无效。我还纠正了一个错误。
-
你的意思是当x为零时你得到nan?这是意料之中的,因为如图所示,梯度是无穷大的。
-
@GeoffreyIrving 是的,你是对的。问题在于 x = 0。如果我简单地将每个 x = 0 添加 0.0001,它似乎可以解决问题并且一切都按预期工作。 TensorFlow 优化器是否有办法处理这种情况而无需我手动添加 0.0001?
标签: machine-learning neural-network tensorflow