<PaddlePaddle学习使用P1>——《PaddlePaddle教程》

时间:2024-04-05 10:44:53

一、PaddlePaddle概述

1.什么是PaddlePaddle

在这里插入图片描述
PaddlePaddle官网地址链接:https://www.paddlepaddle.org.cn/
为什么学习PaddlePaddle:
在这里插入图片描述

2.PaddlePaddle特点

PaddlePaddle优点(目前):
在这里插入图片描述
PaddlePaddle缺点(目前):
在这里插入图片描述
PaddlePaddle平台获奖情况(目前):
在这里插入图片描述
PaddlePaddle行业应用(目前):
在这里插入图片描述
PaddlePaddle学习资源(目前):
在这里插入图片描述
AIStudio官网地址链接:https://aistudio.baidu.com

3.PaddlePaddle体系结构

总体架构:
在这里插入图片描述
编译时与执行时:
在这里插入图片描述
三个重要术语:
在这里插入图片描述

4.PaddlePaddle安装与卸载

以Pycharm安装为例:
官方安装教程地址链接

注:

  • 由于百度提供了AIStudio平台,这里在Pycharm上安装只是为了在Pycharm配置PaddlePaddle环境,通过Pycharm的代码编辑方便快捷优点,实际运行还是在AIStudio平台。
  • 目前pycharm对paddle的兼容性不是很好,因此建议在pycharm编写代码,而运行则将代码拷贝至AIStudio集成平台。

5.在AIStudio集成平台运行PaddlePaddle

(1)打开AIStudio平台官网,注册账号

  • 注册需要身份认证,认证成功后才能使用项目编辑、运行。
  • 百度目前发布新手任务赢算力时长活动。
    新手赢算力任务活动地址链接:https://aistudio.baidu.com/newbie
  • 百度目前发布每日运行即获赠8点GPU免费额度(最多8小时)。
    在这里插入图片描述
    在这里插入图片描述

(2)创建项目

项目创建举例:在这里插入图片描述在这里插入图片描述

(3)编辑运行

  • 由于众所周知的原因:作为学生的我们,经济比较紧张,作者选用免费版。(因人而异,量力而行)
  • 作者在此感谢百度提供的开源学习资源,同时也感谢其他公司、机构、组织、个人等提供的开源学习资源。在这里插入图片描述
    在这里插入图片描述
    基于jupyter notebook的编辑环境页面:在这里插入图片描述
    基于Linux的终端环境:在这里插入图片描述
    AI Studio 经典版环境使用说明地址链接:https://ai.baidu.com/ai-doc/AISTUDIO/sk3e2z8sb
    示例1:使用paddle进行加法操作
    这是paddle 1.x版本支持的调用编写方式:在这里插入图片描述
    在这里插入图片描述
#paddle 1.x版本的调用编写方式
import paddle.fluid as fluid

# 创建两个常量
x = fluid.layers.fill_constant(shape=[1], dtype="int64", value=5)
y = fluid.layers.fill_constant(shape=[1], dtype="int64", value=1)
z = x + y  # 执行两个常量的相加

# 创建执行器
place = fluid.CPUPlace()  # 指定程序在CPU上执行
exe = fluid.Executor(place)  # 创建执行器
result = exe.run(fluid.default_main_program(),
                 fetch_list=[z])  # 指定要返回的结果
print(result)

注:

  • 在paddle新的版本中运行以上代码可能出现报错的情况,这是因为上面的代码是在paddle1.x版本中支持的调用编写。而新版本的paddle可能对之前的版本进行升级,不再支持老版本的部分调用编写。

新版本实现加法:
在这里插入图片描述

import paddle.fluid as fluid
import paddle
try:
    # 兼容PaddlePaddle2.0
    paddle.enable_static()
except:
    pass

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

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

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

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

二、PaddlePaddle的基本概念与操作

1.PaddlePaddle的基本概念

张量:
在这里插入图片描述
在这里插入图片描述
Layer:
在这里插入图片描述
Variable:
在这里插入图片描述
Program:
在这里插入图片描述
Executor:
在这里插入图片描述
Place:
在这里插入图片描述
Optimizer:
在这里插入图片描述
示例2:执行两个张量计算

在这里插入图片描述

import paddle.fluid as fluid
import numpy as np
import paddle
try:
    # 兼容PaddlePaddle2.0
    paddle.enable_static()
except:
    pass

# 定义两个张量
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的执行器
place = fluid.CPUPlace()
exe = fluid.executor.Executor(place)
# 进行参数初始化
exe.run(fluid.default_startup_program())

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

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

2.程序执行步骤

在这里插入图片描述

三、PaddlePaddle综合案例——实现简单线性回归

1.任务介绍

在这里插入图片描述
在这里插入图片描述

2.任务实现

示例3:简单线性回归

#linear_regression.py的代码
import paddle.fluid as fluid
import numpy as np
import paddle
try:
    # 兼容PaddlePaddle2.0
    paddle.enable_static()
except:
    pass

# 定义一个简单的线性网络
x = fluid.data(name='x', shape=[None, 1], dtype='float32')
hidden = fluid.layers.fc(input=x, size=100, act='relu')
hidden = fluid.layers.fc(input=hidden, size=100, act='relu')
net = fluid.layers.fc(input=hidden, size=1, act=None)

# 获取预测程序
infer_program = fluid.default_main_program().clone(for_test=True)

# 定义损失函数
y = fluid.data(name='y', shape=[None, 1], dtype='float32')
cost = fluid.layers.square_error_cost(input=net, label=y)
avg_cost = fluid.layers.mean(cost)

# 定义优化方法
optimizer = fluid.optimizer.SGDOptimizer(learning_rate=0.01)
opts = optimizer.minimize(avg_cost)

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

# 定义训练和测试数据
x_data = np.array([[1.0], [2.0], [3.0], [4.0], [5.0]]).astype('float32')
y_data = np.array([[3.0], [5.0], [7.0], [9.0], [11.0]]).astype('float32')

# 开始训练100个pass
for pass_id in range(100):
    train_cost = exe.run(program=fluid.default_main_program(),
                         feed={x.name: x_data, y.name: y_data},
                         fetch_list=[avg_cost])
    print("Pass:%d, Cost:%0.5f" % (pass_id, train_cost[0]))


test_data = np.array([[6.0]]).astype('float32')
# 开始预测
result = exe.run(program=infer_program,
                 feed={x.name: test_data},
                 fetch_list=[net])
print("当x为6.0时,y为:%0.5f" % result[0][0][0])

四、PaddlePaddle数据准备

1.什么是数据准备

在这里插入图片描述

2.为什么需要数据准备

在这里插入图片描述
示例4:reader数据准备

在这里插入图片描述
在这里插入图片描述

# 04_reader_demo.py
import paddle
# 原始读取器
def reader_creator(file_path):
    def reader():
        with open(file_path, "r") as f:  # 打开文件
            lines = f.readlines()  # 读取所有行
            for line in lines:
                yield line.replace("\n", "")  # 利用生成器关键字创建一个数据并返回

    return reader

reader = reader_creator("test.txt")  # 原始顺序读取器
shuffle_reader = paddle.reader.shuffle(reader, 10)  # 随机读取器
batch_reader = paddle.batch(shuffle_reader, 3)  # 批量随机读取器

# for data in reader():  # 迭代
# for data in shuffle_reader(): # 对随机读取器进行迭代
for data in batch_reader():  # 对批量随机读取器进行迭代
    print(data, end="")

3.预测模型保存和加载

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.fluid API结构图

在这里插入图片描述

五、PaddlePaddle综合案例——实现波士顿房价预测

1.数据集及任务

在这里插入图片描述

2.任务思路

在这里插入图片描述

3.执行结果

在这里插入图片描述
示例5:波士顿房价预测

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#uci_housing_linear.py的代码
import paddle.fluid as fluid
import paddle
import paddle.dataset.uci_housing as uci_housing
import numpy
try:
    # 兼容PaddlePaddle2.0
    paddle.enable_static()
except:
    pass

# 定义一个简单的线性网络
x = fluid.data(name='x', shape=[None, 13], dtype='float32')
hidden = fluid.layers.fc(input=x, size=100, act='relu')
hidden = fluid.layers.fc(input=hidden, size=100, act='relu')
net = fluid.layers.fc(input=hidden, size=1, act=None)

# 获取预测程序
infer_program = fluid.default_main_program().clone(for_test=True)

# 定义损失函数
y = fluid.data(name='y', shape=[None, 1], dtype='float32')
cost = fluid.layers.square_error_cost(input=net, label=y)
avg_cost = fluid.layers.mean(cost)

# 定义优化方法
optimizer = fluid.optimizer.SGDOptimizer(learning_rate=0.01)
opts = optimizer.minimize(avg_cost)

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

# 从paddle接口中获取房价数据集,使用房价数据进行训练和测试
train_reader = paddle.batch(reader=uci_housing.train(), batch_size=128)
test_reader = paddle.batch(reader=uci_housing.test(), batch_size=128)

# 定义输入数据维度
feeder = fluid.DataFeeder(place=place, feed_list=[x, y])

# 开始训练和测试
for pass_id in range(300):
    # 开始训练并输出最后一个batch的损失值
    train_cost = 0
    for batch_id, data in enumerate(train_reader()):
        train_cost = exe.run(program=fluid.default_main_program(),
                             feed=feeder.feed(data),
                             fetch_list=[avg_cost])
    print("Pass:%d, Cost:%0.5f" % (pass_id, train_cost[0][0]))

# 开始测试
for data in test_reader():
    infer_data = numpy.array([data[0] for data in data]).astype("float32")
    infer_label = numpy.array([data[1] for data in data]).astype("float32")
    infer_result = exe.run(program=infer_program,
                           feed={x.name: infer_data},
                           fetch_list=[net])
    # 把每个预测结果都输出
    for i in range(len(infer_label)):
        print('预测结果:%f, 真实结果:%f' % (infer_result[0][i][0], infer_label[i][0]))

后记:
●本博客基于B站开源学习资源,是作者学习的笔记记录,仅用于学习交流,不做任何商业用途!