前言

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

【PaddlePaddle系列】Executor逐步训练模型的更多相关文章

  1. 【PaddlePaddle系列】报错解决方法合集 (不定时更新)

    1.PaddlePaddle使用CPU时正常运行,但是使用GPU时却报出一堆错误信息,节选如下: paddle.fluid.core.EnforceNotMet: enforce allocating ...

  2. Java基础系列--Executor框架(一)

    文章来源:http://www.cnblogs.com/V1haoge/p/8393618.html 一.Executor框架介绍 Executor框架是JDK1.5之后出现的,位于juc包中,是并发 ...

  3. 【PaddlePaddle系列】CIFAR-10图像分类

    前言 本文与前文对手写数字识别分类基本类似的,同样图像作为输入,类别作为输出.这里不同的是,不仅仅是使用简单的卷积神经网络加上全连接层的模型.卷积神经网络大火以来,发展出来许多经典的卷积神经网络模型, ...

  4. 【PaddlePaddle系列】手写数字识别

      最近百度为了推广自家编写对深度学习框架PaddlePaddle不断推出各种比赛.百度声称PaddlePaddle是一个“易学.易用”的开源深度学习框架,然而网上的资料少之又少.虽然百度很用心地提供 ...

  5. PaddlePaddle tutorial

    什么是PaddlePaddle PaddlePaddle,百度旗下深度学习开源平台.Paddle(Parallel Distributed Deep Learning,并行分布式深度学习). 2016 ...

  6. 【翻译】OpenVINO Pre-Trained 预训练模型介绍

    OpenVINO 系列软件包预训练模型介绍 本文翻译自 Intel OpenVINO 的  "Overview of OpenVINO Toolkit Pre-Trained Models& ...

  7. 推荐一款Python神器,5 行 Python 代码 实现一键批量扣图

    今天给大家分享一款Python装逼实用神器. 在日常生活或者工作中,经常会遇到想将某张照片中的人物抠出来,然后拼接到其他图片上去.专业点的人可以使用 PhotoShop 的"魔棒" ...

  8. 华为高级研究员谢凌曦:下一代AI将走向何方?盘古大模型探路之旅

    摘要:为了更深入理解千亿参数的盘古大模型,华为云社区采访到了华为云EI盘古团队高级研究员谢凌曦.谢博士以非常通俗的方式为我们娓娓道来了盘古大模型研发的"前世今生",以及它背后的艰难 ...

  9. 【深度学习系列】PaddlePaddle之手写数字识别

    上周在搜索关于深度学习分布式运行方式的资料时,无意间搜到了paddlepaddle,发现这个框架的分布式训练方案做的还挺不错的,想跟大家分享一下.不过呢,这块内容太复杂了,所以就简单的介绍一下padd ...

随机推荐

  1. 2018.09.20 atcoder Painting Graphs with AtCoDeer(tarjan+polya)

    传送门 一道思维题. 如果没有环那么对答案有k的贡献. 如果恰为一个环,可以用polya求贡献. 如果是一个有多个环重叠的双联通的话,直接转化为组合数问题(可以证明只要每种颜色被选取的次数相同一定可以 ...

  2. 2018.07.20 洛谷P4178 Tree(点分治)

    传送门 又一道点分治. 直接维护子树内到根的所有路径长度,然后排序+双指针统计答案. 代码如下: #include<bits/stdc++.h> #define N 40005 using ...

  3. 一种基于Redis的10行代码实现IP频率控制方法

    优点:可支持海量访问的频率控制,只需要增加Redis机器,单个Redis节点(只占用一个cpu core)即可支持10万/s以上的处理. 基于IP频率限制是种常见需求,基于Redis可以十分简单实现对 ...

  4. python技巧31[python中使用enum][转]

    以下几种方法来模拟enum:(感觉方法一简单实用) # way1 class Directions:     up = 0     down = 1     left = 2     right =3 ...

  5. Airplace平台

    Demo: 左上角:(0, 0)开始导航,手机终端上实时在地图上当前所在显示,当前点以绿色点显示,轨迹点以红色显示. 系统架构:基于移动手机的以网络为辅助的架构.特点:低头顶交流,用户隐私和安全 &g ...

  6. OpenGL ES 光照模型之——环境光照(RenderMonkey测试)

    概述及目录(版权所有,请勿转载 www.cnblogs.com/feng-sc/) 本文总结如何在RenderMonkey下做简单的OpenGL ES环境光光照模型测试. 主要包括如下内容: 1.使用 ...

  7. 20155320 2016-2017-2 《Java程序设计》第五周学习总结

    20155320 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 错误处理 java中所有错误都会被打包为对象,可以通过try catch 代表错误的对象后做 ...

  8. calltree+graphviz 绘出项目函数调用图

    install calltree: download from http://linux.softpedia.com/progDownload/calltree-Download-971.html f ...

  9. Android-ByteUtil工具类

    Byte处理转换相关的工具类: public class ByteUtil { private ByteUtil(){} /** * 把byte[] 转成 Stirng * @param bytes ...

  10. Android sdcard文件读写操作

    这次演示以,安卓原生操作系统 Nexus_6手机进行操作: AndroidManifest.xml配置相关权限: <!-- 增加权限 --> <uses-permission and ...