tensorflow--tf实现线性回归

TensorFlow提供了硬件加速运算(GPU 支持)、自动求导、优化器等一系列对深度学习非常重要的功能。下面将展示如何使用TensorFlow 在即时执行模式下计算一元线性回归。

import numpy as np
import tensorflow as tf
import time

X_raw = np.array([2013, 2014, 2015, 2016, 2017], dtype=np.float32)
y_raw = np.array([12000, 14000, 15000, 16500, 17500], dtype=np.float32)

X = (X_raw - X_raw.min()) / (X_raw.max() - X_raw.min())
y = (y_raw - y_raw.min()) / (y_raw.max() - y_raw.min())

# TensorFlow帮助我们做了两件重要的工作:
# (1)使用tape.gradient(ys,xs)自动计算梯度。
# (2)使用optimizer.apply_gradients(grads_and_vars)自动更新模型参数。
X = tf.constant(X)
y = tf.constant(y)

a = tf.Variable(initial_value=0.)
b = tf.Variable(initial_value=0.)
variables = [a, b]

num_epoch = 10000
# 梯度下降优化器:SGD(随机梯度下降)
optimizer = tf.keras.optimizers.SGD(learning_rate=5e-4)
for e in range(num_epoch):
    # 使用tf.GradientTape()记录损失函数的梯度信息
    with tf.GradientTape() as tape:
        y_pred = a * X + b
        loss = tf.reduce_sum(tf.square(y_pred - y))
    # TensorFlow自动计算损失函数关于自变量(模型参数)的梯度
    grads = tape.gradient(loss, variables)
    # TensorFlow自动根据梯度更新参数,从而最小化损失函数loss:
    # 更新模型参数的方法optimizer.apply_gradients()中需要提供参数grads_and_vars,
    # 即待更新的变量(variables)和损失函数关于这些变量的偏导数(grads)。
    # 具体而言,这里需要传人一个 Python 列表(list),列表中的每个元素是一个(变量的偏导数,变量)对,
    # 比如这里是[(grad_a,a),(grad_b,)]。我们通过grads=tape.gradient(1oss, variables)求出 tape中记录的1oss关于variables=[a,b]中每个变量的偏导数,
    # 也就是grads=[grad_a,grad_b],再使用Python 的zip()函数将grads=[grad_a, grad_b]和 variables=[a,b]拼装在一起,就可以组合出所需的参数了。
    optimizer.apply_gradients(grads_and_vars=zip(grads, variables))

print(a, b)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值