这是paddlepaddle的一篇初学者教程
本文通过一个简单的线性拟合的例子说明paddlepaddle的基础用法。
通过使用一批满足
\[ y=2\times{x}+1 \]
的随机(x, y)元组作为训练集,让神经网络完成拟合的任务。
首先,第一步是引入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插件快速发布