【PaddlePaddle系列】Executor逐步训练模型

本文详述了如何使用PaddlePaddle的Executor进行逐步训练,通过构建神经网络模型来拟合二次函数,介绍了Reader的建立、网络构建、损失函数设定、模型训练及测试的全过程。

前言

PaddlePaddle使用Trainer训练模型虽然直接了当,方便快捷,但是对于一些需要逐步训练的模型则比较麻烦。类似Tensorflow采用session.run的形式逐步训练模型,使得训练过程更加显而易见。PaddlePaddle新版本Fluid中,采用Executor也可以完成类似的训练。本文针对简单的回归问题简述以下PaddlePaddle的Executor训练过程。

 

1. Reader的建立

本文尝试使用神经网络模型拟合二次函数,首先我们建立以下二次函数的训练数据,并加上噪声:

train_x  = np.linspace(-1, 1, 128)       # shape (100, 1)
noise    = np.random.normal(0, 0.1, size=train_x.shape)
train_y  = np.power(train_x, 2) + noise   
def reader():
    def reader_creator():
        for i in range(128):   
            yield train_x[i],train_y[i]
    return reader_creator
train_reader = paddle.batch(reader(),batch_size=64)

2. 网络的构建以及损失函数

我们构建一层10个神经元的隐藏层,代码如下:

#构建网络模型
input_layer   = fluid.layers.data(name='data',shape=[1],dtype='float32')
hid   = fluid.layers.fc(input=input_layer, size=10, act='relu')
output = fluid.layers.fc(input=hid, size=1, act=None)
label  = fluid.layers.data(name='label',shape=[1],dtype='float32')
#损失函数采用均方差
cost   = fluid.layers.square_error_cost(input=output,label=label)
avg_cost = fluid.layers.mean(cost)
#优化器选择
optimizer = fluid.optimizer.AdamOptimizer(learning_rate=0.01)
opts      = optimizer.minimize(avg_cost)

3. 训练模型

训练同往常一样,但是需要新建一个Executor和DataFeeder,然后直接对每个batch进行训练,直接明了。

#选择CPU
place = fluid.CPUPlace()
feeder = fluid.DataFeeder(place=place, feed_list=['data', 'label'])
#克隆program用于后面测试
test_program = fluid.default_main_program().clone(for_test=True)
exe = fluid.Executor(place)
#初始化参数
exe.run(fluid.default_startup_program())
for pass_id in range(1000):
#遍历每个batch
    for batch_id,data in enumerate(train_reader()):
        loss = exe.run(fluid.default_main_program(),
                             feed=feeder.feed(data),
                             fetch_list=[avg_cost])

4. 测试

这里也是同样运用exe.run,与上面训练差不多一样。这里还是用回训练集测试,将每个batch的结果保存在数组中。

    #用于保存每个batch的结果,便签等
    x_ = []
    y_ = []
    l_= []
    for batch_id,data in enumerate(train_reader()):
        x,y,l=exe.run(program=test_program,
               feed=feeder.feed(data),
               fetch_list=[input_layer,output,label])

        x_ =np.hstack((x_,x.ravel()))
        y_ =np.hstack((y_,y.ravel()))
        l_ =np.hstack((l_,l.ravel()))

 

5.结果

红线逐步拟合到散点

 

参考:Tensorflow-Tutorial/tutorial-contents/301_simple_regression.py

代码:GitHub 

转载于:https://www.cnblogs.com/dzqiu/p/9648368.html

非常感谢您的提问。针对您的问题,我可以为您提供一些帮助和建议。 首先,将PaddlePaddle训练好的模型转换为Inference模型代码需要采取以下几个步骤: 1. 将已经训练好的模型文件导出为PaddlePaddle可以识别的格式,比如`.pdparams`和`.pdiparams`文件。 2. 确定模型的输入和输出格式,并将其保存为`.pdmodel`格式的模型描述文件。 3. 利用PaddlePaddle的推理引擎,在您的程序中加载导出的模型文件、模型描述文件以及相应的输入数据,然后获取模型的输出结果。 以下是一个简单的代码示例,可以帮助您将PaddlePaddle训练好的模型转换为Inference模型代码: ```python import paddle.fluid as fluid # step 1: 导出已经训练好的模型文件 place = fluid.CPUPlace() # 或者fluid.CUDAPlace(0) exe = fluid.Executor(place) [inference_program, feed_target_names, fetch_targets] = \ fluid.io.load_inference_model(dirname='/path/to/your/model', executor=exe) # step 2: 确认模型的输入和输出格式,保存模型描述文件 fluid.io.save_inference_model(dirname='/path/to/your/model', feeded_var_names=feed_target_names, \ target_vars=fetch_targets, executor=exe, main_program=inference_program) # step 3: 利用PaddlePaddle的推理引擎进行推理,获取模型的输出结果 input_data = ... # 模型输入数据 output_data = exe.run(inference_program, feed={feed_target_names[0]: input_data}, fetch_list=fetch_targets) ``` 需要注意的是,在执行上述代码之前,您还需要安装PaddlePaddle相关的软件包和依赖项,并且针对不同的模型和数据集进行适当的调整和修改。 希望这些信息能够对您有所帮助,如果您有任何问题或疑问,请随时向我提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值