【paddle深度学习高层API七日打卡营】三岁水课第一天—认识AI与手写数字识别的一天

本文介绍了人工智能、机器学习和深度学习的关系,重点讲解了PaddlePaddle的高层API在手写数字识别中的应用。通过数据处理、模型构造和训练,展示了深度学习模型的构建过程,并提供了代码解析和模型预测的详细步骤。
摘要由CSDN通过智能技术生成

大家好,这里是三岁,别的不会,擅长白话,今天就是我们的白话系列,内容是paddle2.0新出的高程API,在这里的七日打卡营0基础学习,emmm我这个负基础的也来凑凑热闹,那么就开始吧~~~~
注:以下白话内容为个人理解,如有不同看法和观点及不对的地方欢迎大家批评指正!

传说中的第四次“工业革命”

在这里插入图片描述
【白话时间】人工智能缩写AI,大家已经见过很多的人工智能产品,而且越来越多的产品在不断的涌现,质量效果也越来越好
前几年有一个对人工智能的爱称“人工智障”训练的好是人工智能训练不好是“人工智障”,但是近年来,水平的不断提高,在非常多方面已经超过了之前的水平,甚至有非常有意义的使用价值(部分方面超过人

那么人工智能下面有哪些分支和我们要学的深度学习又有说没关系嗯?
在这里插入图片描述

人工智能>机器学习>深度学习

人工智能大家都知道那么什么是机器学习???
回顾人类的历史长河,我们是怎么样一步一步的创新,发展的?
在生物中这个叫做变异,当然有正确的有错误的,所以就有了现在大家说知晓的适者生存,不适者淘汰的理论

那么机器可不可以通过不断的尝试试错得到一个比较好的理论呢???
在这里插入图片描述
看到这个图就知道了,其实 是一样的,规律就是大家不断探索以后得到的一个结果,也就是一个试错的过程。通过我们构建的一个规则然后机器通过算力不断的探索,最后得到一个比较好的结果,这个结果就是传说中的“规律”。

机器学习就是通过一个“函数”(模型)来判断输出你想要的比较合适的一个结果

深度学习就是通过一些神经网络等方法,提取我们的一些特征进行处理。
计算机识别的都是二进制内容不好理解

我们举一个栗子大家就明白了,如果说水果是臭的带刺的你们会想到什么水果,那基本上就是榴莲,通过几个特殊的特征进行提取。

在这里插入图片描述

神经网络

在这里插入图片描述
神经元:和我们的神经元类似,但是他更类似于数学函数里面的斜率之类的一些重要参数。(有加权和、激活函数等构成)

多层神经网络:相对应人类的神经传导,输入相对应接受电信号并传输到大脑皮层的一个过程,前向计算:相对应大脑给出一个指令然后进行运行;返回传播:相对应输入信息不断更新后大脑发出指令完成系列任务,输出相对应完成一件事情。

栗子:手碰到针,大脑皮层会产生痛觉然后大脑(应该是脑干)会发出收手的信号然后会一直检测直到痛感消失。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在不断的发展过程,越来越多的内容标准化,逐步的形成了一些框架和架构。

深度学习万能开发公示

在这里插入图片描述
深度学习训练就像是我们平时的考试,数据是知识,模型是我们的大脑,调优就是我们学习的方法,最后的预测相对应我们的考试,评价我们对知识的掌握情况
在这里插入图片描述
里面的
loss是用于评判模型训练过程好坏的一个值,相对应我们平时对学习方法的一种认可与否。
score这是判断学习成果的,相对应单元测试卷(以上是个人认知,不对可以批评指正,相互学习)
在这里插入图片描述

闻说双飞桨,翩然下广津

手写数字识别实战

在这里插入图片描述
这个内容三岁之前也做过,看了一下发现没有那么的详细但是还是恬不知耻把项目链接什么的贴出来,有兴趣的小伙伴可以去看看
『深度学习7日打卡营』第1课案例:手写数字识别(课程代码地址)
PaddlePaddle2.0 ——手写数字识别(三岁白话paddle项目)
[三岁白话系列]PaddlePaddle2.0——手写数字识别(三岁白话paddle系列博客)

在这里插入图片描述
官网传送门

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面的4步就是我们完成一个书写数字识别的流程,接下来就是雨哥详细代码解析,有一说一,真的细节!
『深度学习7日打卡营』第1课案例:手写数字识别(课程代码地址)

代码解析

数据处理

在这里插入图片描述

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

这个里面涉及了两个高层的API
让我们一起看一下
在这里插入图片描述
这个是paddle.vision.Normalize(mean=0.0, std=1.0, data_format='CHW', to_rgb=False, keys=None)
作用是图像归一化处理
在这里插入图片描述
这个是paddle.vision.MNIST作用就是对书写数字识别进行下载并做基本处理。
就相当于把养殖场的活物给你处理好,直接可以下锅。

经过归一化处理和数据集的整理得到了以下结果:

训练集样本量: 60000,验证集样本量: 10000

数据查看

在这里插入图片描述

print('图片:')
print(type(train_dataset
好的,以下是一个利用 VGG 模型解决手写数字识别Paddle 代码示例: ```python import paddle import paddle.nn as nn class VGGBlock(nn.Layer): def __init__(self, in_channels, out_channels, num_convs): super(VGGBlock, self).__init__() self.conv1 = nn.Conv2D(in_channels, out_channels, kernel_size=3, padding=1) self.relu = nn.ReLU() self.convs = nn.Sequential() for i in range(num_convs - 1): conv_name = 'conv{}'.format(i + 2) setattr(self.convs, conv_name, nn.Conv2D(out_channels, out_channels, kernel_size=3, padding=1)) self.pool = nn.MaxPool2D(kernel_size=2, stride=2) def forward(self, x): x = self.conv1(x) x = self.relu(x) x = self.convs(x) x = self.pool(x) return x class VGGNet(nn.Layer): def __init__(self): super(VGGNet, self).__init__() self.block1 = VGGBlock(in_channels=1, out_channels=64, num_convs=2) self.block2 = VGGBlock(in_channels=64, out_channels=128, num_convs=2) self.block3 = VGGBlock(in_channels=128, out_channels=256, num_convs=3) self.block4 = VGGBlock(in_channels=256, out_channels=512, num_convs=3) self.block5 = VGGBlock(in_channels=512, out_channels=512, num_convs=3) self.flatten = nn.Flatten() self.fc1 = nn.Linear(in_features=512*7*7, out_features=4096) self.fc2 = nn.Linear(in_features=4096, out_features=4096) self.fc3 = nn.Linear(in_features=4096, out_features=10) def forward(self, x): x = self.block1(x) x = self.block2(x) x = self.block3(x) x = self.block4(x) x = self.block5(x) x = self.flatten(x) x = self.fc1(x) x = self.fc2(x) x = self.fc3(x) return x # 加载数据集 train_dataset = paddle.vision.datasets.MNIST(mode='train') test_dataset = paddle.vision.datasets.MNIST(mode='test') # 定义数据预处理函数 transform = paddle.vision.transforms.Compose([ paddle.vision.transforms.Resize((32, 32)), paddle.vision.transforms.ToTensor(), paddle.vision.transforms.Normalize([0.5], [0.5]) ]) # 定义数据加载器 train_loader = paddle.io.DataLoader(train_dataset.transform(transform), batch_size=64, shuffle=True) test_loader = paddle.io.DataLoader(test_dataset.transform(transform), batch_size=64, shuffle=False) # 定义模型、优化器和损失函数 model = VGGNet() optimizer = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters()) criterion = nn.CrossEntropyLoss() # 训练模型 epochs = 10 for epoch in range(epochs): for batch_id, data in enumerate(train_loader()): x_data = data[0] y_data = paddle.to_tensor(data[1]) logits = model(x_data) loss = criterion(logits, y_data) loss.backward() optimizer.step() optimizer.clear_grad() if batch_id % 100 == 0: print("epoch: {}, batch_id: {}, loss is: {}".format(epoch, batch_id, loss.numpy())) # 评估模型 model.eval() accs = [] for batch_id, data in enumerate(test_loader()): x_data = data[0] y_data = paddle.to_tensor(data[1]) logits = model(x_data) pred = paddle.argmax(logits, axis=-1).numpy() acc = np.mean((pred == y_data.numpy()).astype(np.float32)) accs.append(acc) print("accuracy: ", np.mean(accs)) ``` 这份代码使用了 VGGNet 作为模型,并使用了 MNIST 数据集进行训练和测试。在训练过程中,采用了 Adam 优化器和交叉熵损失函数,训练了 10 个 epoch,最终在测试集上达到了较好的准确率。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

三岁学编程

感谢支持,更好的作品会继续努力

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

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

打赏作者

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

抵扣说明:

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

余额充值