tf.maximum не возвращает ожидаемый результат (новичок)

1

У меня есть прогноз временных рядов, который я создал с помощью модели RNN. Временной ряд представляет собой нуль-ограниченный положительный ряд, а прогноз порождает отрицательное значение. Я думал, что могу просто заменить значение нулем, используя следующий код:

y_pred = sess.run(outputs, feed_dict={X: X_test})  # generate the forecast values
y_pred0 = tf.maximum(y_pred, tf.zeros(tf.shape(y_pred)))  # eliminate values<0

Размеры тензора соответствуют...

print(y_pred.shape)
print(y_pred0.shape)
print(y_pred0)

(1, 11, 1)
(1, 11, 1)
Tensor("Maximum_2:0", shape=(1, 11, 1), dtype=float32)

... но тензор y_pred0, похоже, не имеет назначенных значений... что я пропустил? Я попробовал intializing y_pred0 с tf.zeros(shape (y_pred)), но это дает те же результаты. Я уверен, что это ошибка новобранец, но я потратил слишком много времени на ее решение.

Любая помощь очень ценится!

Теги:
tensorflow

2 ответа

0
Лучший ответ

Здесь вы смешиваете символические и числовые вычисления. Операторы Tensorflow более или менее всегда возвращают символические тензоры - они содержат только информацию, которая может быть выведена из того, как они вычисляются (например, форма или тип), но нет фактических значений. Значения вычисляются с помощью run вызова в сеансе, и эти значения, как правило, возвращаются в виде Numpy массивов.

В вашем примере у вас есть массив numpy в y_pred (результат run), но tf.maximum в tf.maximum. Теперь это создаст символический maximum op, который также вернет символический тензор. Массив numpy, который вы положили, фактически преобразуется в тензор под капотом. У вас есть два варианта:

  1. Просто используйте np.maximum на y_pred.
  2. Поскольку вы, вероятно, хотите использовать Tensorflow: Определите op как outputs0 = tf.maximum(outputs, tf.zeros(tf.shape(outputs))) а затем оцените его с помощью sess.run(outputs0, feed_dict={X: X_test}). Это предполагает, что outputs представляют собой некоторые символические вычисления, как в вашем примере.
  • 0
    Большое спасибо ... как и предсказано, ошибка новичка. Цените тщательный ответ!
0

Код делает то, что мне нужно:

import tensorflow as tf

if __name__ == '__main__':

  y_pred = tf.convert_to_tensor([1,0,-1,1,-1])
  y_pred0 = tf.maximum(y_pred, tf.zeros(tf.shape(y_pred), dtype=y_pred.dtype))

  with tf.Session() as sess:
      print(sess.run(y_pred0))

выходы:

[1 0 0 1 0]

Может быть, у вас проблемы с фидом или сеансом фида? В случае, если вам интересно, почему вывод печати - Tensor ("Maximum_2: 0", shape = (1, 11, 1), dtype = float32), Tensorflow строит график перед выполнением. Это означает, что в настоящее время нет реальных значений, только формы и поток. Если вы хотите распечатать значения, вы должны сделать это из сеанса выполнения, как это было в моем примере.

  • 0
    Кроме того, большое спасибо - два ответа и оба образовательных - по крайней мере для меня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню