专栏首页CSDN博客《PaddlePaddle从入门到炼丹》二——计算1+1

《PaddlePaddle从入门到炼丹》二——计算1+1

前言

在第一章介绍了百度AI Studio这个平台,接下来我们就使用这个平台来开发我们的PaddlePaddle。PaddlePaddle是百度在2016年9月27日开源的一个深度学习框架,也是目前国内唯一一个开源的深度学习框架。PaddlePaddle在0.11.0版本之后,开始推出Fluid版本,Fluid版本相对之前的V2版本,Fluid的代码结构更加清晰,使用起来更加方便。这本章中我们将会介绍如何使用PaddlePaddle来计算1+1,选择这个简单的例子主要是为了让读者了解PaddlePaddle的Fluid版本的使用,掌握PaddlePaddle的使用流程。我们讲过介绍如何使用PaddlePaddle定义一个张量和如何对张量进行计算。

计算常量的1+1

PaddlePaddle类似一个科学计算库,比如Python下我们使用的numpy,提供的大量的计算操作,但是PaddlePaddle的计算对象是张量。我们下面就使用PaddlePaddle计算一个[[1, 1], [1, 1]] * [[1, 1], [1, 1]]

首先导入PaddlePaddle库,大部分的API都在paddle.fluid下。

import paddle.fluid as fluid

定义两个张量的常量x1和x2,并指定它们的形状是[2, 2],并赋值为1铺满整个张量,类型为int64.

# 定义两个张量
x1 = fluid.layers.fill_constant(shape=[2, 2], value=1, dtype='int64')
x2 = fluid.layers.fill_constant(shape=[2, 2], value=1, dtype='int64')

接着定义一个操作,该计算是将上面两个张量进行加法计算,并返回一个求和的算子。PaddlePaddle提供了大量的操作,比如加减乘除、三角函数等,读者可以在fluid.layers找到。

# 将两个张量求和
y1 = fluid.layers.sum(x=[x1, x2])

然后创建一个解释器,可以在这里指定计算使用CPU或GPU。当使用CPUPlace()时使用的是CPU,如果是CUDAPlace()使用的是GPU。解析器是之后使用它来进行计算过的,比如在执行计算之前我们要先执行参数初始化的program也是要使用到解析器的,因为只有解析器才能执行program

# 创建一个使用CPU的解释器
place = fluid.CPUPlace()
exe = fluid.executor.Executor(place)
# 进行参数初始化
exe.run(fluid.default_startup_program())

最后执行计算,program的参数值是主程序,不是上一步使用的是初始化参数的程序,program默认一共有两个,分别是default_startup_program()default_main_program()fetch_list参数的值是在解析器在run之后要输出的值,我们要输出计算加法之后输出结果值。最后计算得到的也是一个张量。

# 进行运算,并把y的结果输出
result = exe.run(program=fluid.default_main_program(),
                 fetch_list=[y1])
print(result)

输出信息:

[array([[2, 2],
       [2, 2]], dtype=int64)]

计算变量的1+1

上面计算的是张量常量的1+1,并不能随意修改常量的值,所以下面我们要编写一个使用张量变量作为乘数的程序,类似是一个占位符,等到将要计算时,再把要计算的值添加到占位符中进行计算。

导入PaddlePaddle库和numpy的库。

import paddle.fluid as fluid
import numpy as np

定义两个张量,并不指定该张量的形状和值,它们是之后动态赋值的。这里只是指定它们的类型和名字,这个名字是我们之后赋值的关键。

# 定义两个张量
a = fluid.layers.create_tensor(dtype='int64', name='a')
b = fluid.layers.create_tensor(dtype='int64', name='b')

使用同样的方式,定义这个两个张量的加法操作。

# 将两个张量求和
y = fluid.layers.sum(x=[a, b])

这里我们同样是创建一个使用CPU的解析器,和进行参数初始化。

# 创建一个使用CPU的解释器
place = fluid.CPUPlace()
exe = fluid.executor.Executor(place)
# 进行参数初始化
exe.run(fluid.default_startup_program())

然后使用numpy创建两个张量值,之后我们要计算的就是这两个值。

# 定义两个要计算的变量
a1 = np.array([3, 2]).astype('int64')
b1 = np.array([1, 1]).astype('int64')

这次exe.run()的参数有点不一样了,多了一个feed参数,这个就是要对张量变量进行赋值的。赋值的方式是使用了键值对的格式,key是定义张量变量是指定的名称,value就是要传递的值。在fetch_list参数中,笔者希望把a, b, y的值都输出来,所以要使用3个变量来接受返回值。

# 进行运算,并把y的结果输出
out_a, out_b, result = exe.run(program=fluid.default_main_program(),
                               feed={'a': a1, 'b': b1},
                               fetch_list=[a, b, y])
print(out_a, " + ", out_b," = ", result)

输出信息:

[3 2]  +  [1 1]  =  [4 3]

到处为止,本章就结束了。在本章我们学会了PaddlePaddle的使用方式,那在下一章我们使用PaddlePaddle完成我们的第一个安装——线性回归,我们下章见。

同步到百度AI Studio平台:http://aistudio.baidu.com/aistudio/#/projectdetail/29339 同步到科赛网K-Lab平台:https://www.kesci.com/home/project/5bf75387954d6e0010668f76 项目代码GitHub地址:https://github.com/yeyupiaoling/LearnPaddle2/tree/master/note2

参考资料

  1. http://www.paddlepaddle.org/documentation/api/zh/1.0/layers.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 最全NLP反作弊攻略,从马蜂窝注水事件说起

    10月21日,朋友圈被一篇名为《估值175亿的旅游独角兽,是一座僵尸和水军构成的鬼城?》的文章刷屏。文章作者小声比比指控在线旅游网站马蜂窝存在点评大量造假的情况...

    大数据文摘
  • 英伟达:比起股价,我们更关注计算的未来

    今年的 GTC 系列大会已是第十届,也是连续第三次进入国内,和每次一样,英伟达首席执行官黄仁勋参加了本次大会,并在首日上午进行了主 Keynote 演讲。

    机器之心
  • 双线性汇合(bilinear pooling)在细粒度图像分析及其他领域的进展综述

    细粒度图像分类旨在同一大类图像的确切子类。由于不同子类之间的视觉差异很小,而且容易受姿势、视角、图像中目标位置等影响,这是一个很有挑战性的任务。因此,类间差异通...

    SIGAI学习与实践平台
  • 【免费线上实践】动手训练模型系列:一分钟理解卷积过程

    作为也许是深度学习领域使用得最多的特征提取的方式,卷积核是如何作用于原始输入特征的呢?输入与输出之间又有什么样的关系呢?点击下方小程序,一起查看变换细节。

    SIGAI学习与实践平台
  • DeepMind高赞课程:24小时看完深度强化学习最新进展(视频)

    今天,DeepMind 官推贴出一则告示,将 DeepMind 研究人员今年在 UCL 教授的深度强化学习课程“Advanced Deep Learning a...

    昱良
  • 业界 | 图像识别的未来:机遇与挑战并存

    在计算机视觉领域,图像识别这几年的发展突飞猛进,但在进一步广泛应用之前,仍然有很多挑战需要我们去解决。本文中,微软亚洲研究院视觉计算组的研究员们为我们梳理目前深...

    大数据文摘
  • 如何用 Python 和循环神经网络(RNN)做中文文本分类?

    本文为你展示,如何使用 fasttext 词嵌入预训练模型和循环神经网络(RNN), 在 Keras 深度学习框架上对中文评论信息进行情感分类。

    用户2930930
  • 乱!Bengio一席话引发Marcus与LeCun「舌战」,还有DL帝国主义?

    在社交媒体上,Gary Marcus 的推特像点燃了火药桶一样引来了众多人工智能学者的评论。Marcus 对 Bengio、Hinton、LeCun 的指责更是...

    机器之心
  • 这是一份超全机器学习&深度学习资源清单(105个AI站点),请收藏!

    howie6879在Github上维护了一个机器学习网站导航以及资源的目录,包含了新闻资讯、课程、比赛、项目、文档等导航链接,主流的都涵盖到,是深度学习从业者不...

    昱良
  • DeepMind推出深度学习与强化学习进阶课程(附视频)

    课程地址:https://www.youtube.com/playlist?list=PLqYmG7hTraZDNJre23vqCGIVpfZ_K2RZs

    机器之心

扫码关注云+社区

领取腾讯云代金券