对于新手入门来说,个人建议先看Fluid编程指南,明白了如何使用之后,再看线性回归、数字识别。
我们有一堆数据x和数据y,数据x与数据y之间存在某种规律,我们的目标是当新的x出现后,我们通过这种规律确定y的值,根据y的值可以指导我们的决策。所以首先我们得先得到规律,这就要通过深度学习让机器学到,然后我们给出新的x值,通过已学习到的关系得到新的y值。
上面一段话,总结3个关键点
数学表达出来就是
y = f ( x ) y=f(x) y=f(x)
数据如何传入到PaddlePaddle中进行学习?
如何通过PaddlePaddle进行学习?
学习完成后,如何进行预测?
1.我们通过numpy.array给了4个x的数据1.0、2.0、3.0、4.0,4个y的数据2.0、4.0、6.0、8.0,作为训练数据。
train_x = numpy.array([[1.0], [2.0], [3.0], [4.0]]).astype('float32')
train_y = numpy.array([[2.0], [4.0], [6.0], [8.0]]).astype('float32')
2.定义2个空间x和y,存放train_x和train_y,建立全连接网络,将x与预测y联系到一起。
x = fluid.layers.data(name="x", shape=[1], dtype='float32')
y = fluid.layers.data(name="y", shape=[1], dtype='float32')
y_predict = fluid.layers.fc(input=x, size=1, act=None)
3.如何确定学习的好与不好,标准是什么?cost就是y_predict与y的方差,avg_cost就是均方差,sgd_optimizer就是使用随机梯度下降算法来最小化均方差。
cost = fluid.layers.square_error_cost(input=y_predict, label=y)
avg_cost = fluid.layers.mean(cost)
sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001)
sgd_optimizer.minimize(avg_cost)
4.获得学习到的规律(参数保存到文件中)
model_path="./demo_paddle_model"
fluid.io.save_params(executor=exe,dirname=model_path,main_program=None)
5.使用已经学到的模型做预测(从文件读取参数)
param_path = "./demo_paddle_model"
prog = fluid.default_main_program()
fluid.io.load_params(executor=exe, dirname=param_path,
main_program=prog)
文件SimpleNN.py用于训练
import paddle.fluid as fluid
import numpy
import time
# 定义数据
train_x = numpy.array([[1.0], [2.0], [3.0], [4.0]]).astype('float32')
train_y = numpy.array([[2.0], [4.0], [6.0], [8.0]]).astype('float32')
# 定义网络
x = fluid.layers.data(name="x", shape=[1], dtype='float32')
y = fluid.layers.data(name="y", shape=[1], dtype='float32')
y_predict = fluid.layers.fc(input=x, size=1, act=None)
# 定义损失函数
cost = fluid.layers.square_error_cost(input=y_predict, label=y)
avg_cost = fluid.layers.mean(cost)
sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001)
sgd_optimizer.minimize(avg_cost)
# 参数初始化
cpu = fluid.core.CPUPlace()
exe = fluid.Executor(cpu)
exe.run(fluid.default_startup_program())
# 开始训练
for i in range(10000):
outs = exe.run(
feed={'x': train_x, 'y': train_y},
fetch_list=[y_predict.name, avg_cost.name])
# time.sleep(1)
print(outs)
model_path="./demo_paddle_model"
fluid.io.save_params(executor=exe,dirname=model_path,main_program=None)
文件SimpleNNInfer.py用于预测
import paddle.fluid as fluid
import numpy
# 定义数据
new_x = numpy.array([[9.0]]).astype('float32')
# 定义网络
x = fluid.layers.data(name="x", shape=[1], dtype='float32')
y = fluid.layers.data(name="y", shape=[1], dtype='float32')
y_predict = fluid.layers.fc(input=x, size=1, act=None)
# 参数初始化
cpu = fluid.core.CPUPlace()
exe = fluid.Executor(cpu)
param_path = "./demo_paddle_model"
prog = fluid.default_main_program()
fluid.io.load_params(executor=exe, dirname=param_path,
main_program=prog)
outs = exe.run(
feed={'x': new_x},
fetch_list=[y_predict.name])
print(outs)