深度学习(一):准备及基础概念

本文介绍了深度学习的基础概念,包括人工智能、机器学习与深度学习的关系,神经网络原理,并详细阐述了从问题定义到模型部署的开发万能公式,以飞桨框架为例,通过手写数字识别实战演示了数据准备、模型选择、训练与调优等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

人工智能、机器学习和深度学习三者关系

在这里插入图片描述

神经网络基本概念

在这里插入图片描述

深度学习开发万能公式

深度学习一般过程

在这里插入图片描述
在这里插入图片描述
学习率衰减:学习率先大后小。
学习率太大会错过最优点。

深度学习开发万能公式(问题定义——数据准备——模型选择和开发——模型训练和调优——模型评估测试——部署上线)

数据准备:数据清洗、数据填补、数据切分(训练、测试)
在这里插入图片描述

飞浆框架(2.0)

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

轻松实践——手写数字识别

在这里插入图片描述
在这里插入图片描述
Sequential:快速堆叠网络
Subclass:自定义和组织
高层API框架内置模型:直接调用模型
在这里插入图片描述
paddle.Model;
model.prepared;
model.fit
在这里插入图片描述
model.evaluate;
model.predict
在这里插入图片描述
代码:

#!/usr/bin/env python
# coding: utf-8

# # 导入相关库

# In[1]:


import paddle
import numpy as np
import matplotlib.pyplot as plt

paddle.__version__


# # ② 数据准备
# 
# ## 2.1 数据加载和预处理

# In[2]:


import paddle.vision.transforms as T

# 数据的加载和预处理
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)))


# ## 2.2 数据集查看

# In[3]:


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()


# # ③ 模型选择和开发
# 
# ## 3.1 模型组网
# 
# ![](https://ai-studio-static-online.cdn.bcebos.com/08542974fd1447a4af612a67f93adaba515dcb6723ff4484b526ff7daa088915)

# In[4]:


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


# ## 模型网络结构可视化

# In[5]:


# 模型封装
model = paddle.Model(network)

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


# In[38]:


# 配置优化器、损失函数、评估指标
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)      # 日志展示形式


# # ⑤ 模型评估测试
# 
# ## 5.1 模型评估

# In[40]:


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

print(result)


# ## 5.2 模型预测

# ### 5.2.1 批量预测
# 
# 使用model.predict接口来完成对大量数据集的批量预测。

# In[48]:


# 进行预测操作
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]))


# ### 5.2.2 单张图片预测
# 
# 采用model.predict_batch来进行单张或少量多张图片的预测。

# In[52]:


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

# 单张图片预测
result = model.predict_batch([image])

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


# # ⑥ 部署上线
# 
# ## 6.1 保存模型

# In[54]:


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


# ## 6.2 继续调优训练

# In[56]:


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)


# ## 6.3 保存预测模型

# In[58]:


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


总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Laura_Wangzx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值