线性回归
内容介绍
本次使用PaddlePaddle完成一个深度学习非常常见的入门例子——线性回归,将分别使用自定义数据集和使用PaddlePaddle提供的数据集接口来训练一个线性回归模型。
1. 自定义数据集
在这一部分,将介绍整个线性回归从定义网络到使用自定义的数据进行训练,最后验证网络的预测能力。
首先导入PaddlePaddle库和一些工具类库。
import paddle.fluid as fluid
import paddle
import numpy as np
定义损失函数之后,可以在主程序(fluid.default_main_program)中克隆一个程序作为预测程序,用于训练完成之后使用这个预测程序进行预测数据。这个定义的顺序不能错,因为我们定义的网络结构,损失函数等等都是更加顺序记录到PaddlePaddle的主程序中的。主程序定义了神经网络模型,前向反向计算,以及优化算法对网络中可学习参数的更新,是我们整个程序的核心,这个是PaddlePaddle已经实现的了,只需注重网络的构建和训练即可。
# 复制一个主程序,方便之后使用
test_program = fluid.default_main_program().clone(for_test=True)
接着是定义训练使用的优化方法,这里使用的是随机梯度下降优化方法。PaddlePaddle提供了大量的优化函数接口,除了本项目使用的随机梯度下降法(SGD),还有Momentum、Adagrad、Adagrad等等,可以更加自己项目的需求使用不同的优化方法。
# 定义优化方法
optimizer = fluid.optimizer.SGDOptimizer(learning_rate=0.01)
opts = optimizer.minimize(avg_cost)
然后是创建一个解析器,我们同样是使用CPU来进行训练。创建解析器之后,使用解析器来执行fluid.default_startup_program()
初始化参数。
# 创建一个使用CPU的执行器
place = fluid.CPUPlace()
exe = fluid.Executor(place)
# 进行参数初始化
exe.run(fluid.default_startup_program())
我们使用numpy定义一组数据,这组数据的每一条数据有13个,这是因为我们在定义网络的输入层时,shape
是13,但是每条数据的后面12个数据是没意义的,因为笔者全部都是使用0来填充,纯粹是为了符合数据的格式而已。这组数据是符合y = 2 * x + 1
,但是程序是不知道的,我们之后使用这组数据进行训练,看看强大的神经网络是否能够训练出一个拟合这个函数的模型。最后定义了一个预测数据,是在训练完成,使用这个数据作为x
输入,看是否能够预测于正确值相近结果。
# 定义训练和测试数据place
x_data = np.array([[1.0]