我在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)
答案 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
。