【发布时间】:2016-05-11 05:44:30
【问题描述】:
我正在测试带有回归问题的 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)
但我收到错误消息:No gradients provided for any variable。我认为这是因为我们无法得到tf.cast 的导数。
是否有合适的方法来编写适合我需要的损失函数? 我知道我想要的损失函数不是“可推导的”。您认为将其转换为可导出函数会是一种解决方案吗?
我不确定我是否很清楚......
感谢您的帮助!
保罗
【问题讨论】:
-
我认为当你的变量没有路径到损失函数时会发生错误。可能是您的图形定义中的一个错误。
-
是的,我认为使用 tf.cast,Tensorflow 无法返回变量...但是由于成本需要浮动...
-
您是否碰巧找到了
tf.cast的解决方法?
标签: python tensorflow