百度 AI Studio——《高层API助你快速上手深度学习》课程学习2

百度 AI Studio——《高层API助你快速上手深度学习》课程学习2

直播地址👉http://live.bilibili.com/21689802

AI Studio实践平台

通过AI Studio可以便捷的调试基于Paddle的神经网络,而且一些课程、项目的链接都可以在这上边找到,鉴于之前学TensorFlow的过程,AI Studio平台上的内容很有营养;

用AI毕竟不是开发AI,多读API、多看优秀项目示例;

第一节直播课

  • 人工智能:人类想要达成的目标
  • 机器学习:人工智能达成的一个手段
  • 深度学习:机器学习的一种方法

神经网络的基本概念:

  • 神经元:神经网络中的每个节点称为神经元,由加权和、非线性变换(激活函数)组成;
  • 多层链接:大量的神经元按照不同的层次排布,形成多层的结构连接起来,即成为神经网络;
  • 前向计算和反向传播:网络的输出计算和参数更新;

深度学习的应用:AI+

  • AI摄像头、服务机器人
  • 在线测评、智能批改、拍照搜题
  • 电网动态仿真、高精度视觉巡查机器人
  • 工业质检机器人、工业云关联算法
  • 风险控制、保险理赔、移动支付
  • 影像辅助诊断、语音电子病例、导诊机器人
  • 视觉导航AGV、AI质检产品
  • 高清摄像头车辆识别、智能停车
  • 人脸考勤、访客管理、人口管控
  • 社会治理、警务刑侦、建筑楼宇
工作内容建模平台框架
假设一种网络设计网络结构网络模块的实现(Layer、Tensor),原子函数的实现(Numpy)
设计评价函数(Loss)指定Loss函数Loss函数实现(CrossEntropyLoss)
寻找优化寻解方法指定优化算法优化算法实现(optimizer)
准备训练数据提供数据格式与位置,模型接入数据方式为模型批量送入数据(io.Dataset、io.DataLoader)
训练配置单机与多机配置单机到多机的切换(transpile),训练程序的实现(run)
部署应用或测试环境确定保存模型和加载模型的环节点保存模型实现(save/load、jit.save/jit.load)
评估模型效果指定评估指标指标实现(Accuracy)、图像化工具(VisualDL)

深度学习的一般过程:

  • 问题定义:对显示问题进行分析,直接影响算法的选择、模型评估标准,投入时间
  • 数据准备:
    • 数据范围定义:适配任务的所需信息
    • 数据获取:下载、清洗
    • 数据的预处理:预处理、增强
    • 数据集的定义和切分:训练、评估、测试集
  • 模型选择和开发
    • 对应问题适合的模型选用,寻找或编写对应的模型代码
  • 模型训练和调优
    • 使用数据集启动对模型的训练
    • 围绕业务所需的模型目标进行模型调优
  • 模型评估测试
    • 对训练好的模型进行评估测试
    • 验证模型是否达到业务需求
  • 部署上线
    • 模型存储、导出、推理服务部署
    • 线上系统对接,指标监控

pp飞桨:

  • 问说双飞桨,翩然下广津——朱熹
  • 可以在多种硬件平台上使用,也支持由这些硬件组成的分布式集群上
  • 官网:https://www/paddlepaddle.org.cn/
  • Github:https://github.com/PaddlePaddle/Paddle

2.0版本:

  • 体系化:19大类、功能完善
  • 间接性:一体化高层&底层API
  • 兼容性:可兼容历史版本

静态图和静态图:

  • 动态图模型:边构图 边计算 很灵活的调试运行(training=True)
  • 静态图模型:部署的使用使用的(training=False)

深度学习中的HelloWorld:手写数字识别

## 导入相关库
import paddle
import numpy as np
import matplotlib.pyplot as plt

paddle.__version__


## 数据加载和预处理
import paddle.vision.transforms as T

# 数据的加载和预处理(归一化-1~1)
transform = T.Normalize(mean=[127.5], std=[127.5])

# 训练数据集
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)

# 评估数据集
eval_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)

print('训练集样本量: {},验证集样本量: {}'.format(len(train_dataset), len(eval_dataset)))


## 数据集查看

print('图片:')
print(type(train_dataset[0][0]))
print(train_dataset[0][0])
print('标签:')
print(type(train_dataset[0][1]))
print(train_dataset[0][1])

# 可视化展示
plt.figure()
plt.imshow(train_dataset[0][0].reshape([28,28]), cmap=plt.cm.binary)
plt.show()



# 模型网络结构搭建
network = paddle.nn.Sequential(
    paddle.nn.Flatten(),           # 拉平,将 (28, 28) => (784)
    paddle.nn.Linear(784, 512),    # 隐层:线性变换层
    paddle.nn.ReLU(),              # 激活函数
    paddle.nn.Linear(512, 10)      # 输出层
)



## 模型网络结构可视化
# 模型封装
model = paddle.Model(network)

# 模型可视化
model.summary((1, 28, 28))


# 配置优化器、损失函数、评估指标
model.prepare(paddle.optimizer.Adam(learning_rate=0.001, parameters=network.parameters()),
              paddle.nn.CrossEntropyLoss(),
              paddle.metric.Accuracy())
              
# 启动模型全流程训练
model.fit(train_dataset,  # 训练数据集
          eval_dataset,   # 评估数据集
          epochs=5,       # 训练的总轮次
          batch_size=64,  # 训练使用的批大小
          verbose=1)      # 日志展示形式


## 模型评估测试
# 模型评估,根据prepare接口配置的loss和metric进行返回
result = model.evaluate(eval_dataset, verbose=1)

print(result)


## 模型预测
# 进行预测操作——批量预测
result = model.predict(eval_dataset)

# 定义画图方法
def show_img(img, predict):
    plt.figure()
    plt.title('predict: {}'.format(predict))
    plt.imshow(img.reshape([28, 28]), cmap=plt.cm.binary)
    plt.show()

# 抽样展示
indexs = [2, 15, 38, 211]

for idx in indexs:
    show_img(eval_dataset[idx][0], np.argmax(result[0][idx]))



## 单张图片预测
# 读取单张图片
image = eval_dataset[501][0]

# 单张图片预测
# 采用model.predict_batch来进行单张或少量多张图片的预测
result = model.predict_batch([image])

# 可视化结果
show_img(image, np.argmax(result))

## 部署上线
# 保存用于后续继续调优训练的模型
model.save('finetuning/mnist')


# 继续调优训练
from paddle.static import InputSpec


# 模型封装,为了后面保存预测模型,这里传入了inputs参数
model_2 = paddle.Model(network, inputs=[InputSpec(shape=[-1, 28, 28], dtype='float32', name='image')])

# 加载之前保存的阶段训练模型
model_2.load('finetuning/mnist')

# 模型配置
model_2.prepare(paddle.optimizer.Adam(learning_rate=0.001, parameters=network.parameters()),
                paddle.nn.CrossEntropyLoss(),
                paddle.metric.Accuracy())

# 模型全流程训练
model_2.fit(train_dataset, 
            eval_dataset,
            epochs=2,
            batch_size=64,
            verbose=1)

## 保存预测模型
# 保存用于后续推理部署的模型
model_2.save('infer/mnist', training=False)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值