TensorFlow学习笔记(4):线性回归,TensorFlow实战

说明

此系列文档为学习中国大学mooc,浙江大学开设的《深度学习应用开发-TensorFlow实践》随堂笔记。

有监督单变量机器学习案例

TensorFlow学习笔记(4):线性回归,TensorFlow实战_第1张图片

监督式机器学习

  • 机器学习系统:通过学习如何组合输入的信息,来对未见过的数据进行有用的预测。
  • 标签:是我们要预测的真实事物:y线性回归中的y变量。
  • 特征:指用于描述数据的输入变量:xi线性回归中的[x1.x2 x3 …xn]变量
  • 样本:数据的特定实例:x
    1.有标签样本具有{特征,标签}:{x,y}用于训练模型
    2.无标签样本具有{特征,?}:{x,?}用于对新数据的预测。
  • 模型:可将样本映射到预测标签:y
    由模型内部的参数定义,这些内部参数是通过学习得到的。
  • 训练模型:通过有标签样本学习确定所有权重偏差的理想值
  • 有监督学习中,机器学习算法通过以下方式构建模型:
  1. 检查多个样本并尝试找出可最大限度地减少损失的模型这一过程成为经验风险最小化
  • 损失:对糟糕预测的惩罚;是一个数值,表示对单个样本而言模型预测的准确性;完全预测准确则损失为0,否者损失会较大
  • 训练模型的目标 是从所有样本中找到一组平均损失”较小“的权重和偏差

定义损失函数

  • L1损失:基于模型预测值与标签绝对值之差的绝对值
  • 平方损失:一种常见的损失函数,又称L2损失
  • 均方误差(MSE):指每个样本的平均平方损失
    在这里插入图片描述

模型训练与降低损失

  • 训练模型的迭代方法
    TensorFlow学习笔记(4):线性回归,TensorFlow实战_第2张图片
    TensorFlow学习笔记(4):线性回归,TensorFlow实战_第3张图片
    TensorFlow学习笔记(4):线性回归,TensorFlow实战_第4张图片
    TensorFlow学习笔记(4):线性回归,TensorFlow实战_第5张图片
  • 梯度下降法
  1. 梯度一个向量(矢量),表示某一函数在该点导数沿着该方向取得的最大值,即是函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大。
  2. 梯度假设以其上升为正,则沿着其反方向走
  • 学习率(学习速率/步长):学习率过小花很长世间花费时间太长,梯度学习速率过大则找不到最低点
  • 超参数:机器学习之前要设置的参数,而不是通过训练得到的参数数据,通常情况下,需要对超参数进行优化,选择一组好的超参数,可以提高学习的性能和效果。
  • 典型的超参数:学习率,神经网络的隐含层数量。。。。

实战

TensorFlow学习笔记(4):线性回归,TensorFlow实战_第6张图片

  • 人工生成数据集
  1. w=2.0,b=1,加入噪声 最大振幅为0.4
    TensorFlow学习笔记(4):线性回归,TensorFlow实战_第7张图片
  • *元组表示把元组拆成一个个独立的实参

  • Jupyter用tab补全函数名

  • 准备样本

#需要设置matplotlib为inline模式才能显示图像
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
#生成种子
np.random.seed(5)
#100个等差数据
x_date=np.linspace(-1,1,100)
y_date=2*x_date+1.0+np.random.randn(*x_date.shape)*0.4
plt.scatter(x_date,y_date)
  • 构建模型
#定义超参占位符
x=tf.placeholder("float",name="x")
y=tf.placeholder("float",name="y")
# 定义模型函数
def model (x,w,b):
	return tf.multiply(x,w)+b
#创建变量
w=tf.Variable(1.0,name="w0")
b=tf.Variable(0.0,name="y0")
#创建预测过程
pred=model(x,w,b)
  • 训练模型
  1. 设置训练参数
#迭代次数(训练轮数)
train_epochs=10
#学习率,经验0.01~0.1
learning_rate=0.05
  1. 定义损失函数,这里用L2
loss_function=tf.reduce_mean(tf.square(y-pred))
  1. 定义优化器:定义优化器optimizer,初始化一个GradientDescentOptimizer设置一个学习率和优化目标:最小化损失
optimizer=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)
  1. 创建会话
    会话声明,初始化变量节点
sess=tf.Session()
init=tf.global_variables_initializer()
sess.run(init)
  1. 迭代训练
for epoch in range(train_epochs)
    for xs,ys in zip(x_date,y_date):
        _,loss= sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys})
    b0temp=b.eval(session=sess)
    w0temp=w.eval(session=sess)
    plt.plot(x_date,w0temp*x_date+b0temp)

解释:

  • zip(x_date,y_date),x_date,y_date都是一维100个元素的数组,zip可以合并成一个一维200个元素的数组,但是x_date,y_date按顺序交叉排列
  1. 执行后模型已经训练完成
    测试:
x_test=3.31
predict=sess.run(pred,feed_dict={x:x_test})
print("预测值: %f"%predict)

target=2*x_test+1.0
print("目标值: %f"%target)
  • 小结
    TensorFlow学习笔记(4):线性回归,TensorFlow实战_第8张图片
  • 概念
  1. 批量:用于单次迭代计算中计算梯度的总样本数:全批量,一个样本等等。
    TensorFlow学习笔记(4):线性回归,TensorFlow实战_第9张图片

你可能感兴趣的:(#,TensorFlow)