tf.maximum未返回预期结果(菜鸟)

时间:2018-06-21 18:37:21

标签: python tensorflow

我有一个通过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张量似乎没有赋值...我错过了什么?我尝试使用tf.zeros(shape(y_pred))初始化y_pred0,但是产生的结果相同。我确信这是一个菜鸟错误,但是我现在花了太多时间试图解决它。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您正在这里混合符号和数字计算。 Tensorflow操作或多或少总是返回符号张量-它们仅包含可从它们的计算方式推断的信息(例如shape或dtype),而没有实际值。通过会话中的run调用来计算值,这些值通常以numpy数组的形式返回。

在您的示例中,您在y_pred中有一个numpy数组(run的输出),但是将其输入tf.maximum中。现在,这将创建 symbolic maximum op,它也返回一个符号张量。您放入的numpy数组实际上已转换为内部的张量。您在这里有两个选择:

  1. 只需在np.maximum上使用y_pred
  2. 由于您可能想使用Tensorflow:定义一个像outputs0 = tf.maximum(outputs, tf.zeros(tf.shape(outputs)))的op,然后通过sess.run(outputs0, feed_dict={X: X_test})对其进行评估。假设outputs代表您的示例中的一些符号计算。

答案 1 :(得分: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]

也许您的Feed字典或会话有问题?如果您想知道为什么打印输出是Tensor(“ Maximum_2:0”,shape =(1,11,1),dtype = float32),Tensorflow会在执行之前构建图形。这意味着目前没有可用的实际值,只有形状和流量。如果要打印值,则必须像我在示例中那样在执行会话中进行打印。