我正在阅读张量流的线性回归。下面是示例代码。
n_epochs = 1000
learning_rate = 0.01
X = tf.constant(scaled_housing_data_plus_bias, dtype=tf.float32, name="X")
y = tf.constant(housing.target.reshape(-1, 1), dtype=tf.float32, name="y")
theta = tf.Variable(tf.random_uniform([n + 1, 1], -1.0, 1.0, seed=42), name="theta")
y_pred = tf.matmul(X, theta, name="predictions")
error = y_pred - y
mse = tf.reduce_mean(tf.square(error), name="mse")
gradients = tf.gradients(mse, [theta])[0]
training_op = tf.assign(theta, theta - learning_rate * gradients)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for epoch in range(n_epochs):
if epoch % 100 == 0:
print("Epoch", epoch, "MSE =", mse.eval())
sess.run(training_op)
best_theta = theta.eval()
print("Best theta:")
print(best_theta)
据我了解
dc_w, dc_b = tf.gradients(cost, [w,b])
[w,b]
上方是一个列表,但在theta之下是尺寸矩阵,例如具有偏斜度的形状为(9, 1)
,假设第一个是偏斜度项,后来是w1 --- w8。
但是作者将theta作为[theta]
传递,但没有获得计算出的输出以及输出的外观。
我的问题是为什么作者在下面的行中使用[0]
gradients = tf.gradients(mse, [theta])[0]
我不明白上面这行要做什么。我查看了张量流的API描述,但无法遵循。
请解释