TF:Fetch参数x具有无效类型<type'numpy.float32'=“”>,必须是字符串或Tensor。 (无法将float32转换为Tensor或Operation。)

时间:2017-08-15 08:26:49

标签: python numpy tensorflow

我在TF中有一个时间序列模型。它基本上是一个简单的自回归模型。

原始y是长度为100的向量(n)。

我得到的浮点数不是张量误差(按照主题)。我只是在第二个实例得到它。

LR = .01
STEPS = 100

def Net(x, w, b):
  # x has 2 previous values
  x = [x[-1], x[-2], x[-1] - x[-2]]
  x = tf.reshape(x, [1, 3])
  x = tf.add(tf.matmul(x, w[0]), b[0])
  pred = tf.add(tf.matmul(x, w[1]), b[1])
  return pred

y_data = y - np.mean(y)

x = tf.placeholder(tf.float32, [2], name='x')
y = tf.placeholder(tf.float32, [1], name='y')
w = [tf.Variable(tf.random_normal([3, 3])), tf.Variable(tf.random_normal([3, 1]))]
b = [tf.Variable(tf.random_normal([1])), tf.Variable(tf.random_normal([1]))]
pred = Net(x, w, b)
cost = tf.sqrt(tf.reduce_mean(tf.square(tf.subtract(pred, y))))
optimizer = tf.train.AdamOptimizer(learning_rate=LR).minimize(cost)

init = tf.global_variables_initializer()
with tf.Session() as sess:
  sess.run(init)
  for step in range(STEPS):
    # random samples of data
    ts = np.random.choice(np.arange(2, n), int(n * .5), replace=False)
    for t in ts:
      x_data = [y_data[t - 2], y_data[t - 1]]
      y_data_cur = [y_data[t]]
      print(x_data, y_data_cur, x, y, pred)
      _, cost, p = sess.run([optimizer, cost, pred], feed_dict={x: x_data, y: y_data_cur})
      print(cost, p)
    if step % 10 == 0:
      print(step, cost)

1 个答案:

答案 0 :(得分:2)

运行模型时:

_, cost, p = sess.run([optimizer, cost, pred], feed_dict={x: x_data, y: y_data_cur})

您正在覆盖cost变量,该变量用于保存成本的TensorFlow张量及其评估值,因此下一次迭代失败。只需更改变量的名称:

_, cost_val, p = sess.run([optimizer, cost, pred], feed_dict={x: x_data, y: y_data_cur})

当然,在cost语句中将cost_val替换为print