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

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

(中国大学MOOC)《深度学习应用开发-TensorFlow实践》(第5讲---单变量线性回归 :TensorFlow实战)_第1张图片
特征:输入的{x1, x2, … , xn}
标签:对应的y

在监督式机器学习中,通过检查多个样本并尝试找出可最大限度地减少损失的模型这一过程称为经验风险最小化。
(中国大学MOOC)《深度学习应用开发-TensorFlow实践》(第5讲---单变量线性回归 :TensorFlow实战)_第2张图片
均方误差 ( MSE) 指的是每个样本的平均平方损失:
(中国大学MOOC)《深度学习应用开发-TensorFlow实践》(第5讲---单变量线性回归 :TensorFlow实战)_第3张图片

训练模型的迭代方法

(中国大学MOOC)《深度学习应用开发-TensorFlow实践》(第5讲---单变量线性回归 :TensorFlow实战)_第4张图片
开始的时候会给w,b赋初始值。然后多轮训练,直到总体损失不再变化或至少变化极其缓慢为止(收敛)。

(中国大学MOOC)《深度学习应用开发-TensorFlow实践》(第5讲---单变量线性回归 :TensorFlow实战)_第5张图片
注意MSE是一个关于w和b的二元函数,上图是一个三维图形,在某点向各个方向的行进中,沿着梯度方向是变化最快的方向。

梯度下降法

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

学习率

沿着负梯度方向进行下一步探索, 前进多少合适?
例如:如果梯度大小为 2.5,学习速率为 0.01,则梯度下降法算法会选择距离前一个点 0.025 的位置作为下一个点。
(中国大学MOOC)《深度学习应用开发-TensorFlow实践》(第5讲---单变量线性回归 :TensorFlow实战)_第6张图片

超参数

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

线性回归问题 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实践》吴明晖、李卓蓉、金苍宏

你可能感兴趣的:(深度学习及图像)