前言

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. 详解Windows Service Wrapper(winsw.exe)及应用场景

    winsw.exe可以帮助nginx作为windows服务自启动,不需要每次都输入命令,很方便,使用到目前为止这种做法的效果很完美.你得到了 Windows 服务的支持,而且在服务重启时没有遗留孤立的 ...

  2. Nginx中间件使用心得(三)

    一.Nginx搭建系统需求 1.系统硬件:CPU >= 2Core,内存 >= 256M      2.自行搭建服务器(Linux操作系统) (1) 使用vmWare虚拟服务器 (2)使用 ...

  3. JAVA“动态”为类添加属性

    部分参考:http://www.cnblogs.com/zy2009/p/6725843.html pom.xml中添加: <dependency> <groupId>comm ...

  4. QGIS Server Quickstart

    http://live.osgeo.org/en/quickstart/qgis_mapserver_quickstart.html

  5. 常用算法 (JS实现)

    全排序列 function swap(array,a,b){ var m=array[a]; array[a]=array[b]; array[b]=m; } function full_sort(a ...

  6. new Date()之参数传递

    JavaScript下,new Date([params]),参数传递有以下五种方式: 1.new Date("month dd,yyyy hh:mm:ss"); 2.new Da ...

  7. C - 无间道之并查集 HihoCoder - 1066

    输入 每个测试点(输入文件)有且仅有一组测试数据. 每组测试数据的第1行为一个整数N,表示黑叔叔总共进行的操作次数. 每组测试数据的第2~N+1行,每行分别描述黑叔叔的一次操作,其中第i+1行为一个整 ...

  8. 团队项目(第三周)—GG队

    需求改进&系统设计 队员 学号 叶尚文(队长) 3116008802 蔡晓晴 3216008808 杜婷萱 3216008809 龙剑初 3116004647 于泽浩 3116004661 一 ...

  9. static关键字(二)作用总结

    静态变量和静态方法 static关键字最基本的用法是: 1.被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来 2.被static修饰的方法属于类方法,可以通过 ...

  10. SyntaxError: Non-ASCII character '\xe5' in file test.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

    python的默认编码文件是用的ASCII码,而你的python文件中使用了中文等非英语字符. 在Python源文件的最开始一行,加入一句: # coding=UTF-8