autodiff

作者: Lonelyroots | 来源:发表于2023-02-01 23:25 被阅读0次

autodiff

import tensorflow as tf
import numpy as np
from sklearn.datasets import fetch_california_housing
from sklearn.preprocessing import StandardScaler


# 前面的代码执行的不错,但是它需要数学上通过损失函数MSE来求导梯度
# 在线性回归的例子中,这样是可以的,看起来通过数学公式去求解不难
# 但是如果是深度学习,我们很难这样去做,会比较头疼,会很容易出错
# 幸运的是,TensorFlow提供的autodiff特性可以自动的并有效的计算梯度为我们
# reverse-mode autodiff


n_epochs = 10000
learning_rate = 0.001

housing = fetch_california_housing()
m, n = housing.data.shape
housing_data_plus_bias = np.c_[np.ones((m, 1)), housing.data]
# 可以使用TensorFlow或者Numpy或者sklearn的StandardScaler去进行归一化
scaler = StandardScaler().fit(housing_data_plus_bias)
scaled_housing_data_plus_bias = scaler.transform(housing_data_plus_bias)

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')

# random_uniform函数创建图里一个节点包含随机数值,给定它的形状和取值范围,就像numpy里面rand()函数
theta = tf.Variable(tf.random_uniform([n + 1, 1], -1.0, 1.0), name='theta')
y_pred = tf.matmul(X, theta, name="predictions")
error = y_pred - y
mse = tf.reduce_mean(tf.square(error), name="mse")
# 梯度的公式:(y_pred - y) * xj
# gradients = 2/m * tf.matmul(tf.transpose(X), error)
gradients = tf.gradients(mse, [theta])[0]
# 赋值函数对于BGD来说就是 theta_new = theta - (learning_rate * gradients)
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)

文章到这里就结束了!希望大家能多多支持Python(系列)!六个月带大家学会Python,私聊我,可以问关于本文章的问题!以后每天都会发布新的文章,喜欢的点点关注!一个陪伴你学习Python的新青年!不管多忙都会更新下去,一起加油!

Editor:Lonelyroots

相关文章

  • autodiff

    autodiff 文章到这里就结束了!希望大家能多多支持Python(系列)!六个月带大家学会Python,私聊我...

  • autodiff

    autodiff 文章到这里就结束了!希望大家能多多支持Python(系列)!六个月带大家学会Python,私聊我...

  • autodiff

    autodiff 文章到这里就结束了!希望大家能多多支持Python(系列)!六个月带大家学会Python,私聊我...

  • autodiff

    autodiff 文章到这里就结束了!希望大家能多多支持Python(系列)!六个月带大家学会Python,私聊我...

  • autodiff

    autodiff 文章到这里就结束了!希望大家能多多支持Python(系列)!六个月带大家学会Python,私聊我...

  • autodiff

    autodiff 文章到这里就结束了!希望大家能多多支持Python(系列)!六个月带大家学会Python,私聊我...

  • AutoDiff流量回放在集成测试中的实践应用-汽车之家

    文章来源:本文节选自TesterHome社区爱好者合力编写的《2021接口测试白皮书》。 接口回归测试面临的问题 ...

网友评论

      本文标题:autodiff

      本文链接:https://www.haomeiwen.com/subject/dolwhdtx.html