对于新手入门来说,个人建议先看Fluid编程指南,明白了如何使用之后,再看线性回归、数字识别。
我们有一堆数据x和数据y,数据x与数据y之间存在某种规律,我们的目标是当新的x出现后,我们通过这种规律确定y的值,根据y的值可以指导我们的决策。所以首先我们得先得到规律,这就要通过深度学习让机器学到,然后我们给出新的x值,通过已学习到的关系得到新的y值。
上面一段话,总结3个关键点
数学表达出来就是
数据如何传入到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)
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)
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)
结果: