瞎聊深度学习——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的基本应用
|
7天前
|
机器学习/深度学习 数据采集 人工智能
AI赋能教育:深度学习在个性化学习系统中的应用
【10月更文挑战第26天】随着人工智能的发展,深度学习技术正逐步应用于教育领域,特别是个性化学习系统中。通过分析学生的学习数据,深度学习模型能够精准预测学生的学习表现,并为其推荐合适的学习资源和规划学习路径,从而提供更加高效、有趣和个性化的学习体验。
44 9
|
4天前
|
机器学习/深度学习 人工智能 监控
深度学习在图像识别中的应用与挑战
本文探讨了深度学习技术在图像识别领域的应用,并分析了当前面临的主要挑战。随着卷积神经网络(CNN)的发展,图像识别的准确性和效率得到了显著提升。然而,数据不平衡、模型泛化能力、计算资源消耗等问题仍然是制约深度学习在图像识别领域进一步发展的关键因素。本文将详细介绍深度学习在图像识别中的应用案例,并讨论解决现有挑战的可能策略。
|
1天前
|
机器学习/深度学习 传感器 监控
深度学习在图像识别中的突破与应用
随着人工智能的飞速发展,深度学习已经成为推动图像识别技术进步的核心动力。本文旨在探讨深度学习在图像识别领域的最新突破及其广泛应用,通过分析卷积神经网络(CNN)等关键技术的发展,揭示深度学习如何革新传统图像处理方式,提升识别精度和效率。文章还将概述当前面临的挑战与未来发展趋势,为读者提供一个全面而深入的技术视角。
|
6天前
|
机器学习/深度学习 监控 自动驾驶
深度学习在图像识别中的应用与挑战
本文探讨了深度学习在图像识别领域的应用现状,分析了其面临的主要技术挑战和解决方案。通过对比传统方法和深度学习模型的优势,揭示了深度学习如何推动图像识别技术的发展,并展望了未来的研究方向。
|
4天前
|
机器学习/深度学习 分布式计算 自动驾驶
深度学习在图像识别中的革命性应用####
【10月更文挑战第29天】 本文深入探讨了深度学习技术如何彻底革新图像识别领域,通过卷积神经网络(CNN)的架构优化、数据集增强策略及迁移学习的应用,显著提升了图像分类与目标检测的准确率。文章概述了深度学习模型训练的关键挑战,如过拟合、计算资源依赖性,并提出了创新性解决方案,包括正则化技术、分布式计算框架及自适应学习率调整策略。强调了深度学习在自动驾驶、医疗影像分析等领域的广阔应用前景,同时指出了隐私保护、模型可解释性等伦理法律问题的重要性,为未来研究提供了方向。 ####
22 5