paddlepaddle教程1

这是paddlepaddle的一篇初学者教程
本文通过一个简单的线性拟合的例子说明paddlepaddle的基础用法。

任务目标

通过使用一批满足

\[ y=2\times{x}+1 \]

的随机(x, y)元组作为训练集,让神经网络完成拟合的任务。

import类库

首先,第一步是引入paddlepaddle的库。同时,也要引入构造训练数据集的random库以及数据科学中必用的numpy库。

import paddle
import paddle.fluid as fluid
import paddle.fluid.dygraph as dygraph
from paddle.fluid.dygraph import Linear
import numpy as np
import os
import random



建立模型

这里我们采用两个全连接层,中间隐藏参数设定100个,这个模型应当具有足够的拟合能力。


class Regressor(fluid.dygraph.Layer):
    # 这里是类的继承,看不懂的去找那个教你们py基础的老师的麻烦,我就不讲了
    def __init__(self):
        super(Regressor, self).__init__()
        name_scope = self.full_name()
        self.fc1 = Linear(1,100)
        # 说实话,这个任务来说100个隐藏神经元有点多了
        self.fc2 = Linear(100,1)
    
    # 网络的前向计算函数
    def forward(self, inputs):
        x0 = self.fc1(inputs)
        x = self.fc2(x0)
        return x




训练,测试

因为这次的模型很简单,计算量也不大,所以训练迭代1000次即可又不错的效果

with fluid.dygraph.guard():
    reg = Regressor()
    opt = fluid.optimizer.Adagrad(0.01,parameter_list=reg.parameters())
    reg.train()
    ran = random.Random(0)
    for target_list in range(1000):
        # 产生这一次训练中的随机训练数据
        rannum = ran.random()*10
        var = dygraph.to_variable(np.array([rannum]).astype('float32'))
        re = reg(var)
        loss = fluid.layers.square_error_cost(re,dygraph.to_variable(np.array([rannum*2+1]).astype('float32')))
        # 用一个激活函数,其实没必要,意思意思
        lossn = fluid.layers.relu(loss)
        # 反向传播
        lossn.backward()
        opt.minimize(loss)
        # print(loss)
        reg.clear_gradients()
        pass
    print("train succeed!")
    while True:
        in1 = input("enter sonthing to test the model, ctrl+c to break.")

        var1 = dygraph.to_variable(np.array([int(in1)]).astype('float32'))
        re1 = reg(var1)
        print('input', in1)
        print('result:', re1)


运行结果输出示例


本文章使用limfx的vsocde插件快速发布