编写梯度下降的“ tf2.0”方法是什么

时间:2019-12-28 02:54:41

标签: python-3.x tensorflow machine-learning

我正在使用过时的机器学习教科书(使用Scikit-Learn和Tensorflow进行动手机器学习),因此示例使用的是tf1.0。我试图弄清tf2.0中所有内容的“流”是什么,因为看起来sessions已经不复存在了?我环顾四周,想出了一种方法:

n_epochs = 1000
learning_rate = 0.11

X = tf.constant(scaled_housing_data_biased, dtype=tf.float32)
y = tf.constant(housing.target.reshape(-1, 1), dtype=tf.float32)

with tf.GradientTape() as tape:
    # randomly initialise theta
    theta = tf.Variable(tf.random.uniform([n+1, 1]), dtype=tf.float32)
    # make a guess
    y_pred = tf.linalg.matmul(X, theta)
    error = y_pred - y
    mse = tf.reduce_mean(tf.square(error))

grads = tape.gradient(mse, theta)

for e in range(n_epochs):
    if e % 100 == 0:
        print("Epoch #{} w/ MSE {:.3f}".format(e, mse))
    with tf.GradientTape() as tape:
        theta.assign(theta - learning_rate * grads)
        y_pred = tf.linalg.matmul(X, theta)
        error = y_pred - y
        mse = tf.reduce_mean(tf.square(error))
    grads = tape.gradient(mse, theta)
print(theta)

与教科书的简单sess.run(...)代码相比,这看起来确实很笨拙和凌乱。更多有经验的用户将如何写呢? (是的,我也知道已经有一个优化的GradientDescnetOptimizer,但这不是重点)

0 个答案:

没有答案