TensorFlow系统学习笔记3(机器学习核心步骤、线性回归问题举例及其图形化显示损失函数)

1 机器学习核心步骤

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

上述步骤是使用TensorFlow进行算法设计与训练的核心步骤。

2 线性回归问题举例

下面通过线性回归问题的简单例子,介绍实现机器学习的思路,重点讲解了下述步骤:

  1. 生成人工数据集及其可视化
  2. 构建线性模型
  3. 定义损失函数
  4. 定义优化器、最小损失函数
  5. 训练结果的可视化
  6. 利用学习到的模型进行预测
2.1 生成人工数据集及其可视化
#在jupyter中,使用matplotlib显示图像需要设置为inline模式,否则不会显示图像
%matplotlib inline
import matplotlib.pyplot as plt #载入matplotlib
import numpy as np #载入numpy
import tensorflow as tf #载入TensorFlow

#设置随机数种子
np.random.seed(5)

#直接采用np生成等差数列的方法,生成100个点,每个点的取值在-1~1之间
x_data = np.linspace(-1,1,100)

# y = 2x + 1 + 噪声,其中噪声的维度与x_data一致
y_data = 2 * x_data + 1.0 + np.random.randn(*x_data.shape) * 0.4
#画出随机生成数据的散点图
plt.scatter(x_data,y_data)

#画出我们想要学习到的线性函数y = 2x + 1
plt.plot(x_data,2 * x_data + 1.0,color="red",linewidth=3)

在这里插入图片描述

2.2 构建线性模型
#构建模型
x = tf.placeholder("float",name="x")
y = tf.placeholder("float",name="y")
def model(x,w,b):
    return tf.multiply(x,w)+b

#定义模型结构
#构建线性函数的斜率,变量“w0”
w = tf.Variable(1.0,name="w0")
#构建线性函数的截距,变量“b0”
b = tf.Variable(0.0,name="b0")
#pred 是预测值,前向计算
pred = model(x,w,b)

2.3 定义损失函数
#定义损失函数
#采用均方差作为损失函数
loss_funtion = tf.reduce_mean(tf.square(y-pred))
2.4 定义优化器、最小化损失函数
#训练模型
#迭代次数(训练轮数)
train_epochs = 10
#学习率
learning_rate = 0.05

#定义优化器
#梯度下降优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_funtion)
2.5 训练结果及其可视化

训练结果:

#创建会话
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

#迭代训练
#开始训练,轮数为epoch,采用SGD随机梯度下降优化方法
for epoch in range(train_epochs):
    for xs,ys in zip(x_data,y_data):
        _,loss = sess.run([optimizer,loss_funtion],feed_dict={x:xs,y:ys})
    b0temp = b.eval(session=sess)
    w0temp = w.eval(session=sess)
    plt.plot(x_data,w0temp * x_data + b0temp) #画图

在这里插入图片描述
结果可视化:

print("w:",sess.run(w))
print("b:",sess.run(b))

plt.scatter(x_data,y_data,label="original data")
plt.plot(x_data,x_data * sess.run(w) + sess.run(b),\
        label="Filted line",color="r",linewidth=3)
plt.legend(loc=2)#通过参数loc指定图例位置

在这里插入图片描述

2.6 利用学习到的模型进行预测
#利用模型,进行预测
x_test = 3.21

predict = sess.run(pred,feed_dict={x:x_test})
print("预测值:%f" % predict)

target = 2*x_test + 1.0
print('目标值:%f' % target)

在这里插入图片描述

3 线性回归问题的显示损失函数

#在jupyter中,使用matplotlib显示图像需要设置为inline模式,否则不会显示图像
%matplotlib inline
import matplotlib.pyplot as plt #载入matplotlib
import numpy as np #载入numpy
import tensorflow as tf #载入TensorFlow

#设置随机数种子
np.random.seed(5)
#直接采用np生成等差数列的方法,生成100个点,每个点的取值在-1~1之间
x_data = np.linspace(-1,1,100)

# y = 2x + 1 + 噪声,其中噪声的维度与x_data一致
y_data = 2 * x_data + 1.0 + np.random.randn(*x_data.shape) * 0.4
#画出随机生成数据的散点图
plt.scatter(x_data,y_data)

#画出我们想要学习到的线性函数y = 2x + 1
#plt.plot(x_data,2 * x_data + 1.0,color="red",linewidth=3)

在这里插入图片描述

#构建模型
x = tf.placeholder("float",name="x")
y = tf.placeholder("float",name="y")
def model(x,w,b):
    return tf.multiply(x,w)+b

#定义模型结构
#构建线性函数的斜率,变量“w0”
w = tf.Variable(1.0,name="w0")
#构建线性函数的截距,变量“b0”
b = tf.Variable(0.0,name="b0")
#pred 是预测值,前向计算
pred = model(x,w,b)

如下添加了
#控制显示loss值的粒度
display_step = 10

#训练模型
#迭代次数(训练轮数)
train_epochs = 10
#学习率
learning_rate = 0.05
#控制显示loss值的粒度
display_step = 10

#定义损失函数
#采用均方差作为损失函数
loss_funtion = tf.reduce_mean(tf.square(y-pred))

#定义优化器
#梯度下降优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_funtion)

如下添加了:
#显示损失值loss
#控制报告的粒度
#例如,如果display_step设为2,则将每训练2个样本输出一个损失值
#与超参数不同,修改display_step 不会更改模型所学习的规律
loss_list.append(loss)
step += 1
if step % display_step == 0:
print(“Train step:”,"%02d" % (epoch+1),“step:%03d” % (step),“loss=”,
“{:.9f}”.format(loss))

for epoch in range(train_epochs):
    for xs,ys in zip(x_data,y_data):
        _,loss = sess.run([optimizer,loss_funtion],feed_dict={x:xs,y:ys})
        #显示损失值loss
        #控制报告的粒度
        #例如,如果display_step设为2,则将每训练2个样本输出一个损失值
        #与超参数不同,修改display_step 不会更改模型所学习的规律
        loss_list.append(loss)
        step += 1
        if step % display_step == 0:
            print("Train step:","%02d" % (epoch+1),"step:%03d" % (step),"loss=",\
                 "{:.9f}".format(loss))
    b0temp = b.eval(session=sess)
    w0temp = w.eval(session=sess)
    plt.plot(x_data,w0temp * x_data + b0temp) #画图

在这里插入图片描述

plt.plot(loss_list)

在这里插入图片描述

plt.plot(loss_list,"r.")

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值