zoukankan      html  css  js  c++  java
  • paddle1.8-官方文档1-快速上手(1)-基本概念

    paddle1.8-官方文档1-快速上手(1)-基本概念

    paddle1.8-官方文档1-快速上手(1)-基本概念 目录划分  
    一、基本概念: 
      1.1 编程指南  
      1.2 Variable
      1.3 Tensor
      1.4 LoDTensor
      1.5 Operator
      1.6 Program
      1.7 Executor
      1.8 命令式编程使用教程
    

    壹、基本概念

    一、编程指南

    学习: 
      1. 如何表示和定义数据变量。 
      2.如何完整组建一个深度学习网络 并进行训练。
    

    ① 数据的表示和定义

    paddle使用 tensor 承载数据,包括: 模型中的可学习参数(如 网络权重、偏置等),网络中每一层 输入、输出数据,常量数据。

    • paddle中使用 fluid.data 创建数据变量,fluid.data 需要指定 Tensor 的形状信息 和 数据类型,当遇到无法确定的维度时,可以将相应维度指定为 None,如下:
    import paddle.fluid as fluid  
    
    # 定义一个数据类型 int64 的二维数据变量X,X的第一维的维度为3,第二个维度未知,要在程序执行过程中 才能确定,因此X的形状 可以指定为 【3, None】
    x = fluid.data(name="x", shape=[3, None],  dtype="int64")
    
    # 大多数网络都会采用 batch 方式进行数据组织, batch 大小在定义时不确定,因此 batch 所在维度(通常时第一维)可以指定 None
    batched_x = fluid.data(name="", shape=[None, 3, None], dtype="int64")
    
    • 除 fluid.data 之外,还可以使用 fluid.layers.fill_constant 来创建常量,如下 代码将创建一个 维度为 【3, 4】,数据类型为 int64 的 Tensor,期中所有元素值均为16.
    import paddle.fluid as fluid
    data = fluid.layers.fill_constant(shape=[3, 4], value=16, dtype="int64")
    

    *需要注意的是: 在声明式编程模型方式中,上述定义的 Tensor 并不具有值(即使创建常量的时候指定了 Value),他们仅代表将要执行的操作,在网络执行时(训练或预测)才会进行真正的赋值操作,比如打印上述代码中的data 将会得到对其信息的描述:

    print(data) 
    输出结果: 
      name: "fill_constant_0.tmp_0"
      type {
          type: LOD_TENSOR
          lod_tensor {
              tensor {
                  data_type: INT64
                  dims: 3
                  dims: 4
              }
          }
      }
      persistable: false
    
    • 在网络执行过程中,获取 Tensor 数值有两种方式:
      • 方式一是利用 paddle.fluid.layers.Print 创建一个打印操作,打印正在访问的 Tensor
        方式一的代码实现如下所示:
        import paddle.fluid as fluid
        
        data = fluid.layers.fill_constant(shape=[3, 4], value=16, dtype='int64')
        data = fluid.layers.Print(data, message="Print data:")
        
        place = fluid.CPUPlace()
        exe = fluid.Executor(place)
        exe.run(fluid.default_startup_program())
        
        ret = exe.run()
        
        运行时输出结果:
        1571742368    Print data:    The place is:CPUPlace
        Tensor[fill_constant_0.tmp_0]
            shape: [3,4,]
            dtype: x
            data: 16,16,16,16,16,16,16,16,16,16,16,16,
        
      • 方式二是将Variable添加在 fetch_list 中

    ② 数据读取

    使用 fluid.data 创建数据变量之后,需要把网络执行所需要的数据读取到对应变量中,具体数据准备,参考Paddle静态图、动态图数据准备

    ③ 组建网络

    在Paddle中,数据计算类API统一称为Operator(算子),简称OP,大多数OP在 paddle.fluid.layers 模块中提供。
    例如用户可以利用 paddle.fluid.layers.elementwise_add() 实现两个输入Tensor的加法运算:

    # 定义变量 
    import paddle.fluid as fluid
    a = fluid.data(name="a", shape=[None,1], dtype="int64")
    b = fluid.data(name="b", shape=[None,1], dtype="int64")
    
    # 组建网络
    result = fluid.layers.elementwise_add(a, b)
    
    # 准备运行网络 
    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}        # 将输入数据x,y 分别赋值给变量 a, b
          fetch_list = [result]        # 通过 fetch_list 参数指定需要获取的变量结果
      )
    
    # 输出计算结果
    print(data_1, data_2, outs[0][0])
    

    ④ 组建更加复杂的网络

    ⑤ 一个完整的网络示例

    ⑥ 进一步学习

    二、Variable

    三、Tensor

    四、LoDTensor

    五、Operator

    六、Program

    七、Executor

    八、命令式编程使用教程(动态图)

    贰、编程实践

  • 相关阅读:
    石墨烯
    spring 安装
    orm 对象关系映射
    刷机问题
    环境必备
    spring 例子
    刷系统——黑屏问题
    android 文件下载
    c# 事件处理
    回忆测试广告理论
  • 原文地址:https://www.cnblogs.com/zhangtao-0001/p/14830170.html
Copyright © 2011-2022 走看看