(中国大学MOOC)《深度学习应用开发-TensorFlow实践》(第5讲---单变量线性回归 :TensorFlow实战)

监督机器学习基本术语(单变量线性回归为例)

在这里插入图片描述
特征:输入的{x1, x2, … , xn}
标签:对应的y

在监督式机器学习中,通过检查多个样本并尝试找出可最大限度地减少损失的模型这一过程称为经验风险最小化。
在这里插入图片描述
均方误差 ( MSE) 指的是每个样本的平均平方损失:
在这里插入图片描述

训练模型的迭代方法

在这里插入图片描述
开始的时候会给w,b赋初始值。然后多轮训练,直到总体损失不再变化或至少变化极其缓慢为止(收敛)。

在这里插入图片描述
注意MSE是一个关于w和b的二元函数,上图是一个三维图形,在某点向各个方向的行进中,沿着梯度方向是变化最快的方向。

梯度下降法

关于梯度的概念,可以参看高等数学教材的方向导数和梯度概念介绍的章节。梯度方向就是函数图像上某点沿着某方向变化率最大的方向。

学习率

沿着负梯度方向进行下一步探索, 前进多少合适?
例如:如果梯度大小为 2.5,学习速率为 0.01,则梯度下降法算法会选择距离前一个点 0.025 的位置作为下一个点。
在这里插入图片描述

超参数

在机器学习中,超参数是在开始学习过程之前设置的参数,如学习率、神经网络的隐含层数量……

线性回归问题 TensorFlow实战

使用TensorFlow进行算法设计与训练的核心步骤:

  1. 准备数据
  2. 建立模型
  3. 训练模型
  4. 进行预测

本文是搞线性回归的,y = wx + b。使用人工数据集。具体步骤直接用代码注释说明。假设学习的函数是y = 2x + 1。

### 0.假定我们要练的模型是y=2*x+1

# 在Jupyter中显示图像
%matplotlib inline

import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf

### 1 准备数据集

np.random.seed(5)
x_data = np.linspace(-1, 1, 100) # 按等差数列生成-1~1之间的100个点
# *x_data.shape就是把元组shape的参数拆出来。增噪声,产生随机数是0均值1标准差的正态分布
y_data = 2.0 * x_data + 1.0 + np.random.randn(*x_data.shape)*0.4 

### 1.1 画出随机数据的散点图
plt.scatter(x_data, y_data) # 散点图
plt.plot(x_data, 2*x_data+1, color="red", linewidth=3) # 直线 y = 2 * x + 1


### 2 构建模型

x = tf.placeholder(tf.float32, name="x")
y = tf.placeholder(tf.float32, name="y")

### 2.1 定义模型函数
def model(x, w, b):
    return tf.multiply(x, w) + b

### 2.2 定义变量
w = tf.Variable(1.0, name="w0")
b = tf.Variable(0.0, name="b0")
pred = model(x, w, b) # 预测值


### 3 训练模型

### 3.1 设置超参数
train_epochs = 10 # 训练轮数
learning_rate = 0.05 # 学习率

### 3.2 定义损失函数
loss_function = tf.reduce_mean(tf.square(y-pred))

### 3.3 定义优化器
optimizer =  tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)

### 3.4 开始训练
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

for epoch in range(train_epochs):
    for xs, ys in zip(x_data, y_data):
        _, loss = sess.run([optimizer, loss_function], feed_dict={x:xs, y:ys})
    bTmp = b.eval(session=sess)
    wTmp = w.eval(session=sess)
    plt.plot(x_data, wTmp*x_data+bTmp)

print("w=", sess.run(w), ", b=", sess.run(b))
### 4 进行预测
print(sess.run(w)*2 + sess.run(b))
sess.close()

特此说明

本文参考中国大学MOOC官方课程《深度学习应用开发-TensorFlow实践》吴明晖、李卓蓉、金苍宏

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值