瞎聊深度学习——PaddlePaddle的使用(一)

简介: 瞎聊深度学习——PaddlePaddle的使用(一)

PaddlePaddle介绍

PaddlePaddle是百度自主研发的集深度学习核心框架、工具组件和服务平台为一体的技术领先、功能完备的开源深度学习平台,有全面的官方支持的工业级应用模型,涵盖自然语言处理、计算机视觉、推荐引擎等多个领域,并开放多个预训练中文模型。


PaddlePaddle同时支持稠密参数和稀疏参数场景的大规模深度学习并行训练,支持千亿规模参数、数百个节点的高效并行训练。PaddlePaddle拥有多端部署能力,支持服务器端、移动端等多种异构硬件设备的高速推理,预测性能有显著优势。目前PaddlePaddle已经实现了API的稳定和向后兼容,具有完善的中英双语使用文档。


PaddlePaddle的使用

PaddlePaddle是一个开源的深度学习平台,而在我们进行使用的时候主要使用的是其核心框架Paddle Fluid。Paddle Fluid提供覆盖深度学习开发、训练、预测及部署全流程的服务。


和其他我们常用的深度学习框架一样,Fluid同样使用Tensor结构来承载数据。


Tensor的示例可以如下来表示:

image.png

用图片来表示一下1-6维的Tensor:


Fluid目前支持的数据类型如下(截止到2019.6):

float16: 部分操作支持

float32: 主要实数类型

float64: 次要实数类型,支持大部分操作

int32: 次要标签类型

int64: 主要标签类型

uint64: 次要标签类型

bool: 控制流数据类型

int16: 次要标签类型

uint8: 输入数据类型,可用于图像像素


Fluid中存在三种特殊的Tensor:


1、模型中的可学习参数

深度学习中可学习的参数(包括网络权值、偏置等)。该类参数在整个训练过程中会不断的接受优化算法的更新。

参数的定义如下(其中name用来表示名称,shape用来表示维度,dtype用来表示数据类型):

w = fluid.layers.create_parameter(name='w',shape=[1],dtype='float32')

通常情况下,我们并不需要自己来创建网络中的可学习参数,Fluid为大部分常见的神经网络基本计算模块都提供了封装。

以全连接模型为示例,Fluid会直接为全连接层创建权值和偏置两个可学习参数,此时我们并不需要像上面一样调用Parameter接口。

y = fluid.layers.fc(input=x,size=128,bias_attr=True)

2、输入输出Tensor

神经网络中输入输出数据也可以看做是一个特殊的Tensor,在这个Tensor中,一些维度的大小在定义模型时无法确定(如batch size,图片的宽度高度等),这些数据在我们定义模型时就需要进行占位。

batch size的定义:一次训练所选取的样本数(选取适当,会有效的防止内存爆炸 )。

Fluid中使用Fluid.layers.data来接收输入数据,我们需要提供形状信息,无法确定的时候可以指定维度为None。


代码示例:

# 定义名称为x,第一维度为3,数据类型为float64的数据
x = fluid.layers.data(name="x", shape=[3, None], dtype="float64")
# batch size无需显示指定,paddle会自动补充0维度为batch size,并且在运行时填充正确的数值
a = fluid.layers.data(name="a", shape=[3, 4], dtype='int64')
# 假如在我们熟知的卷积神经网络中图片的宽、高会不断的发生变化,我们可以有如下的定义方法
b = fluid.layers.data(name="image", shape=[3, None, None], dtype="float32")

3、常量Tensor

Fluid通过fill_constant接口来实现常量Tensor,我们可以指定维度、数据类型、常量值。

data = fluid.layers.fill_constant(shape=[1], dtype="int64", value=3)

注:和其他的框架一样,我们所定义的Tensor是不具有具体值的,知识定义了一个需要执行的操作,后文中会讲到如何运行Tensor。


数据传入

上面一部分我们只说了如何定义数据却没有明确指出如何传入数据,我们定义好数据后需要使用fluid.Executor或者fluid.ParallelExecutor接口来传入数据,Executor发挥着类似于解释器(类似于tf中的session)的作用:

# 创建CPU使用
place = fluid.CPUPlace()
# 创建调试器
output = fluid.Executor(place)
# 初始化调试器
output.run(fluid.default_main_program())

数据操作

Fluid中使用OP(Operator)来表示对数据的操作,我们可以使用内置指令来描述他们的神经网络。

在Python中,Fluid中的OP被封装在paddle.fluid.layers,paddle.fluid.nets等模块中。

举个例子魔门可以用paddle.fluid.layers.elementwise_add()实现两个输入Tensor的加法运算:

#定义网络
import paddle.fluid as fluid
a = fluid.layers.data(name="a",shape=[1],dtype='float32')
b = fluid.layers.data(name="b",shape=[1],dtype='float32')
result = fluid.layers.elementwise_add(a,b)
#定义Exector
cpu = fluid.CPUPlace() #定义运算场所,这里选择在CPU下训练
exe = fluid.Executor(cpu) #创建执行器
exe.run(fluid.default_startup_program()) #网络参数初始化
#准备数据
import numpy
data_1 = int(input("Please enter an integer: a="))
data_2 = int(input("Please enter an integer: b="))
x = numpy.array([[data_1]])
y = numpy.array([[data_2]])
#执行计算
outs = exe.run(
feed={'a':x,'b':y},
fetch_list=[result.name])
#验证结果
print ("%d+%d=%d" % (data_1,data_2,outs[0][0]))

输出如下:

image.png

我们如果要获取网络执行过程中a,b的值,可以将a,b添加到fetch_list中:fetch_list=[a,b,result.name]

本文就讲述了Fluid的一些基本操作,后续会深入理解高级操作。

相关文章
|
机器学习/深度学习 存储 算法
瞎聊深度学习——一文了解各种循环神经网络
瞎聊深度学习——一文了解各种循环神经网络
|
机器学习/深度学习 数据处理 计算机视觉
瞎聊深度学习——卷积神经网络
瞎聊深度学习——卷积神经网络
|
机器学习/深度学习 算法 Serverless
瞎聊深度学习——神经网络基础(概念,正则化)
瞎聊深度学习——神经网络基础(概念,正则化)
|
机器学习/深度学习 缓存 监控
瞎聊深度学习——IMDB影评文本分类
瞎聊深度学习——IMDB影评文本分类
|
机器学习/深度学习 编译器 TensorFlow
瞎聊深度学习——TensorFlow的基本应用
瞎聊深度学习——TensorFlow的基本应用
|
11天前
|
机器学习/深度学习 人工智能 测试技术
深度学习在图像识别中的应用与挑战
本文探讨了深度学习技术,尤其是卷积神经网络(CNN)在图像识别任务中的最新进展和面临的主要挑战。通过分析不同的网络架构、训练技巧以及优化策略,文章旨在提供一个全面的概览,帮助研究人员和实践者更好地理解和应用这些技术。
43 9
|
7天前
|
机器学习/深度学习 人工智能 算法
深度学习在图像识别中的应用与挑战
本文探讨了深度学习技术在图像识别领域的应用,重点分析了卷积神经网络(CNN)的工作原理及其在处理图像数据方面的优势。通过案例研究,展示了深度学习如何提高图像识别的准确性和效率。同时,文章也讨论了当前面临的主要挑战,包括数据不足、过拟合问题以及计算资源的需求,并提出了相应的解决策略。
|
8天前
|
机器学习/深度学习 分布式计算 并行计算
深度学习在图像识别中的应用与挑战
本文深入探讨了深度学习技术在图像识别领域的应用,分析了当前主流的卷积神经网络(CNN)架构,并讨论了在实际应用中遇到的挑战和可能的解决方案。通过对比研究,揭示了不同网络结构对识别准确率的影响,并提出了优化策略。此外,文章还探讨了深度学习模型在处理大规模数据集时的性能瓶颈,以及如何通过硬件加速和算法改进来提升效率。
|
8天前
|
机器学习/深度学习 人工智能 计算机视觉
深度学习在图像识别中的应用与挑战
【10月更文挑战第38天】本文将深入探讨深度学习如何在图像识别领域大放异彩,并揭示其背后的技术细节和面临的挑战。我们将通过实际案例,了解深度学习如何改变图像处理的方式,以及它在实际应用中遇到的困难和限制。
|
8天前
|
机器学习/深度学习 传感器 自动驾驶
深度学习在自动驾驶中的应用与挑战####
本文探讨了深度学习技术在自动驾驶领域的应用现状、面临的主要挑战及未来发展趋势。通过分析卷积神经网络(CNN)和循环神经网络(RNN)等关键算法在环境感知、决策规划中的作用,结合特斯拉Autopilot和Waymo的实际案例,揭示了深度学习如何推动自动驾驶技术向更高层次发展。文章还讨论了数据质量、模型泛化能力、安全性及伦理道德等问题,为行业研究者和开发者提供了宝贵的参考。 ####