Я тестирую среду Tensorflow с проблемой регрессии. Мой вход имеет много функций, а мой вывод - только один. На данный момент это работает, но я думаю, что моя функция Cost не точная для того, что я хочу, поэтому у меня довольно низкая точность.Neural Networks: проектирование Функция стоимости «недифференцируемая»/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))
Так на самом деле, я получаю довольно хороший прогноз на сумму выходов, но у меня есть только точность на 60%, если я считаю предсказание, чтобы быть точным, если он находится в 10% от фактического выпуска продукции. Моя точность записывается так:
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
.
Есть ли способ написать функцию потерь, которая бы соответствовала моим потребностям? Я знаю, что функция потерь, которую я хочу, не «выводима». Считаете ли вы, что преобразование его в выводимую функцию будет решением?
Я не уверен, что я был очень понятно ...
Спасибо за вашу помощь!
Пол
Я думаю, что ошибка возникает, когда нет пути от ваших переменных к функции потерь. Может быть возможной ошибкой в определении графика. – shekkizh
Да, я думаю, что с tf.cast Tensorflow не сможет вернуться к переменным ... Но поскольку стоимость должна быть плавающей ... –
Вы случайно не нашли работу для 'tf.cast '? –