gpt4 book ai didi

python - 神经网络 : designing Cost function "not differentiable"/Tensorflow

转载 作者:行者123 更新时间:2023-12-01 03:57:41 25 4
gpt4 key购买 nike

我正在使用回归问题测试 Tensorflow 框架。我的输入有很多特征,而我的输出只有一个。目前,它正在工作,但我认为我的成本函数对于我想要的并不准确,所以我的准确度相当低。

我的目标是在实际输出的 10% 范围内预测输出,也就是说对于每个输出:

if (y_actual - y_predicted) < 0.1 * y_actual :
cost = 0
else :
cost = 1

因此对于预测输出向量:[130, 35, 65, 43] 与实际输出向量 [125, 10, 75, 40] 相比,我应该得到 2 的成本。(130 和40 位于 10%,35 和 65 不在)

目前,我使用平方差。

cost = tf.reduce_sum(tf.squared_difference(y_predicted,y_)/(2*nb_batches))

所以实际上,我对输出总和得到了相当好的预测,但如果我认为预测在实际输出的 10% 内是准确的,那么我的准确度只有 60%。我的准确度是这样写的:

with tf.name_scope('accuracy'):
with tf.name_scope('correct_prediction'):
correct_prediction = tf.less_equal(tf.abs((y_predicted-y_)), 0.1*tf.abs((y_))) # True if y_diff <= 10% * y_actual
with tf.name_scope('accuracy'):
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) # count 1 if correct prediction is True ; else False ; Do the sum on all the data tested
tf.scalar_summary('accuracy', accuracy)

我尝试编写其他成本函数,例如:

cost = tf.reduce_sum(tf.cast((tf.greater_equal(tf.abs((y_predicted-y_)), 0.1*tf.abs(y_))),tf.float32)

但我收到错误:没有为任何变量提供渐变。我认为这是因为我们无法得到tf.cast的导数。

是否有正确的方法来编写适合我的需要的损失函数?我知道我想要的损失函数不是“可导的”。您认为将其转换为可导函数会是一个解决方案吗?

我不确定我说得是否清楚......

感谢您的帮助!

保罗

最佳答案

您可以使用
来代替比较运算符tf.nn.relu(tf.abs(y_predicted-y_)-tf.abs(y_))
获得可微的成本函数。

relu 操作计算 max(0, x),从而给出您正在做的事情的连续版本。主要区别在于,您将因距离较远而受到更多惩罚,因此您没有二元属性(但这通常是您在回归中的目标)。
这应该会产生比平方损失更好的结果。

关于python - 神经网络 : designing Cost function "not differentiable"/Tensorflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37147671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com