版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章
机器怎么学习——01看图识数字1场景导入2知识小百科3AI实验室4分享评价1场景导入回想小时候,在我们上幼儿园的时候,老师和家长会教我们认识从1到10的数字,学习“人、大、天……”这样的汉字,我们是如何学会的呢?每个人写出来的字体都不完全一样,而我们会从看到的这些画面里面去找一些共同之处,比如“1”,是从上到下的一竖,我们看老师写过几次之后,就算字体有些偏斜、粗细不均匀,我们也能把这个字符和“1”这个概念关联起来,这个过程就是“学习”,如右图所示为不同字体的“1”。1场景导入各种数字12知识小百科活动目标:学习神经网络概念学习字符识别的原理学习神经网络建立和训练过程实现手写字符识别机器学习最基本的做法,是使用算法来解析数据,不断学习,然后对世界中发生的事做出判断和预测。此时,研究人员不会亲手编写软件、确定特殊指令集、然后让程序完成特殊任务,相反,研究人员会用大量数据和算法“训练”机器,让机器学会如何执行任务。正如人工智能先驱ArthurSamuel在1959年的定义:“机器学习是需要研究的领域,它给计算机学习的能力而不是明确地编程能力”。根据学习模式,机器学习分为监督学习、无监督学习,细分的话还有半监督学习和强化学习等。(一)机器学习1、监督学习监督学习,也称为监督训练或有教师学习。通过已有的训练样本(即已知数据以及其对应的输出)去训练得到一个最优模型(这个模型属于某个函数的集合,最优则表示在某个评价准则下是最佳的)。再利用这个模型将所有的输入映射为相应的输出,对输出进行简单的判断从而实现分类或预测的目的。如输入了一个人的信息,他是有性别属性的。当输入模型后,就可以明确的知道了输出的结果,也可以验证型的对错。(一)机器学习在监督式学习下,输入数据被称为“训练数据”,每组训练数据有一个明确的标识或结果,如对防垃圾邮件系统中“垃圾邮件”“非垃圾邮件”,对手写数字识别中的“1、2、3、4”等。在建立预测模型的时候,监督式学习建立一个学习过程,将预测结果与“训练数据”的实际结果进行比较,不断的调整预测模型,直到模型的预测结果达到一个预期的准确率。监督式学习的常见应用场景如分类问题和回归问题。(一)机器学习2、无监督学习无监督学习与监督学习的不同之处在于事先没有任何训练样本,而需要直接对数据进行建模。是否有监督,就看输入数据是否有标签。输入数据有标签(即数据有标识分类),则为有监督学习,没标签则为无监督学习(非监督学习)。在很多实际应用中,并没有大量的标识数据进行使用,并且标识数据需要大量的人工工作量,非常困难。这就需要非监督学习根据数据的相似度,特征及相关联系进行模糊判断分类。主要用于经济预测、异常检测、数据挖掘、图像处理、模式识别等领域。(一)机器学习人工神经网络(ArtificialNeuralNetworks,ANN)是早期机器学习中的一个重要的算法,历经数十年风风雨雨。神经网络的原理是受我们大脑的生理结构——互相交叉相连的神经元启发。1、生物神经网络回顾生物课上学到的知识,人类学习是靠大脑神经元的连接。人类的大脑是由大约100亿~1000亿个生物神经元构成的,如图所示。每一个神经元都和几千个其他神经元相连,神经元能根据环境变化做出反应,再将信息给其他的神经元。(二)神经网络(二)神经网络生物神经元的构成一个典型的生物神经元由四个部分组成:(1)树突:一个神经元有若干个树突,它们能接收来自其他神经元的信号,并将信号传递给细胞体。(2)细胞体:细胞体是神经元的核心,它把各个树突传递过来的信号加总起来,得到一个总的刺激信号。(3)轴突:当细胞体内的刺激信号超过一定阈值之后,神经元的轴突会对外发送信号。(4)突触:该神经元发送的信号(若有)将由突触向其他神经元或人体内的其他组织(对神经信号做出反应的组织)传递。(二)神经网络需要说明的是,由于神经元结构的可塑性,突触的传递作用可增强或减弱,因此神经元具有学习与遗忘的功能。人类大脑中的神经元相互联结构成了极其复杂的生物神经网络系统,如图所示。(二)神经网络生物神经网络系统2.人工神经网络按照生物神经元的结构和工作原理构造出来的一个抽象和简化了的模型,也就诞生了所谓的“模拟大脑”。该神经元模型包含输入、输出与计算功能。输入可以类比为生物神经元的树突,而输出可以类比为生物神经元的轴突,计算则可以类比为细胞核。如右图是一个典型的神经元模型:包含有3个输入,1个输出,以及2个计算功能。注意中间的箭头线。这些线称为“连接”,每个上有一个“权值”。(二)神经网络(二)神经网络典型的神经元模型每一个神经元都为它的输入分配权重,这个权重的正确与否与其执行的任务直接相关,最终的输出由这些权重加总来决定。权重扮演了生物神经元中突触的角色。调整权重,可以让它做你想做的事情。和生物神经网络类似,多个神经元模型按照一定的规则连接就形成了人工神经网络ANN。但与大脑中一个神经元可以连接一定距离内的任意神经元不同,人工神经网络具有离散的层、连接和数据传播的方向。如下图所示为神经网络ANN基本结构,由输入层、隐含层和输出层组成,图中的圆点为神经元。(二)神经网络(二)神经网络神经网络ANN基本结构相比于生物神经网络纷繁复杂,最初科学家只做出了单层的神经网络,后来做出了双层。而多层神经网络的突破发生在2012年,多伦多大学的GeoffreyHinton教授使用5层神经网络的机器学习,令图像识别的准确率大幅突破了原先人们认为的极限,而三年后微软研究院的Resnet神经网络到了152层。层数越多学习的深度就越深,也就越能认复杂的图形。(二)神经网络以学习认识数字为例子,我们来体验一下神经网络学习和工作的过程。数字识别隶属于字符识别,也叫光学字符识别(OCR,OpticalCharacterRecognition),是指将字符图像,翻译成计算机字符编码的过程。ORC技术目前主要应用在证件识别、银行卡识别、车牌识别、名片识别、票据识别等等,改变了人们对着图片往电脑里敲字符的历史。(三)字符识别OCR(三)字符识别OCR数字识别流程图回想下我们学习认识数字“1”的过程:(1)首先我们要明白老师写在黑板上的是什么,那白色的竖线是我们需要接收的信息。这就是图像处理里的二值化。这个白色多重,才是老师写上去的呢?这就是判断的灰度阈值。通过二值化可以让我们更清晰的得到关注的信息,如下图所示。(三)字符识别OCR(三)字符识别OCR不同阈值下的图像二值化效果(2)图像降噪滤波。黑板上如果有没擦干净的地方,或者粉笔写的不清晰的地方,那也是我们不关心的,需要滤除掉,这就是降噪和滤波。(三)字符识别OCR图像降噪滤波的效果(3)图像校正。一般情况下,我们看到的字符不会是横平竖直的,但是却不影响我们去认识,我们的大脑会自动的对字体进行校正,同样在字符图像处理的过程中,我们也需要进行倾斜校正,如图所示。(三)字符识别OCR图像降噪滤波的效果(4)字符分割。我们从小学习汉字的时候,都是要写在田字格里面,这样我们可以清楚的知道哪些笔画组成了一个完整的字。同样的道理,如果想要人工智能识别出文字,首先要知道哪些像素组成了文字,这就是字符分割。下图所显示的分割结果和我们使用的田字格是不是很像?(三)字符识别OCR(三)字符识别OCR字符分割(5)经过前面的处理,我们已经得到了一个一个独立的文字,这个时候就要在我们的脑海中去寻找这是什么字了。我们学过“一”字的特征是一条横线,“田”字的特征是在方框中有一个十字,这些我们脑海中的特征,在计算机里就是“特征向量”,这是一组数字组合。通过对比这些特征,计算机可以将这些字符的图片和字符所对应的概念对应起来,如图所示。(三)字符识别OCR(三)字符识别OCR字符识别的结果可视化是数据科学中很重要的一个步骤,能够为过程和结果提供一个非常好的展示效果,增加可信度。在Python中,matolotlib是一个非常强大的图形库。在线安装:(四)Matplotlib库pipinstallmatplotlib本地安装:pipinstallmatplotlib-3.1.2-cp37-cp37m-win_amd64.whl实例:使用Matplotlib库可视化图像(四)Matplotlib库#加载Matplotlib、OpenCV库importmatplotlib.pyplotaspltimportcv2#读取图像(默认以BGR通道读取图像)img=cv2.imread('./Lena.png')#BGR通道转RGB通道b,g,r=cv2.split(img)dst=cv2.merge([r,g,b])#可视化显示图像plt.imshow(dst)plt.show()实例Matplotlib绘图示例运行结果:(四)Matplotlib库图片绘制结果我们学习知识的过程,往往需要做大量的练习题,对于神经网络的学习过程,也同样如此。给计算机用来学习的这些“习题”,我们称之为数据集(DataSet),又称为资料集、数据集合或资料集合,是一种由数据所组成的集合。就像我们学习时使用的习题集会有数学、语文等不同的科目,数据集也有数值、图片、语音、文本等等各种各样的类型。对于训练不同的神经网络,需要用到不同类型的数据,这就需要用不同的数据集,比如手写字符数据集、汽车图片数据集等。(五)数据集(五)数据集手写字符数据集汽车图片数据集数据集一般是由数据和编号组成,在使用的过程中,会被划分成“训练集”和“测试集”,这就类似我们的练习题和考试题。神经网络建立好之后,通过大量的训练数据,让神经网络进行学习;神经网络训练完成之后,就可以使用测试数据或者实际应用场景中采集到的数据来让神经网络进行判断。一般情况下,训练数据量越大,神经网络判断的结果就会越准确,就像学习知识更多的学生一般会获得更好的成绩。(五)数据集3AI实验室(一)任务发布目标实现一个数字识别的程序要求(1)通过大量手写体数字,训练一个神经网络模型,可以识别字符的图像。(2)使用字符的图像,验证识别效果。配置好python3.x语言环境;VScode集成开发环境(Windowsx64UserInstaller版本);第三方Python库有:OpenCV库、Numpy库、PyTorch库、Torchvision库和Matplotlib库。本任务还需准备MNIST数据集。MNIST是机器学习领域中经典的手写图片数据集,这些图片采集不同人手写的从0到9的数字,由6万张训练图片和1万张测试图片构成,每张图片都是28*28像素大小(单通道),如图所示:(二)任务环境(二)任务环境数字示例图片MNIST数据集由以下四个部分组成:训练图片:train-images-idx3-ubyte.gz训练图片标签:train-labels-idx1-ubyte.gz测试图片:t10k-images-idx3-ubyte.gz测试图片标签:t10k-labels-idx1-ubyte.gzMNIST数据集采用ubyte格式存储,便于压缩和节省空间功能实现分为两个部分,神经网络模型的训练和用模型来识别字符图片。(三)任务实施任务流程图1、训练数字识别模型1)通过代码实现MNIST数据集的下载。2)代码分析(三)任务实施#加载PyTorch库importtorchimporttorch.nnasnnimporttorch.nn.functionalasFimporttorch.optimasoptim#加载Torchvision库importtorchvisionfromtorchvisionimportdatasets,transforms(三)任务实施#加载Matplotlib库importmatplotlib.pyplotasplt#默认显示512张图片BATCH_SIZE=512#默认训练批次20次EPOCHS=20#默认使用cpu加速DEVICE=torch.device("cuda"iftorch.cuda.is_available()else"cpu")(三)任务实施#构建数据转换列表tsfrm=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1037,),(0.3081,))])#下载MNIST数据集train_loader=torch.utils.data.DataLoader(datasets.MNIST(root='data',train=True,download=False,transform=tsfrm),batch_size=BATCH_SIZE,shuffle=True)(三)任务实施#测试集test_loader=torch.utils.data.DataLoader(datasets.MNIST(root='data',train=False,download=False,transform=tsfrm),batch_size=BATCH_SIZE,shuffle=True)特别说明:由于官方已经实现dataset,用户可以直接使用DataLoader来获取数据集。设置download=True,即可实现数据集在线下载;设置shuffle=True表示每次epoch都重新打乱训练样本。MNIST数据集包含6万张训练样本,1万张测试样本,像素大小均为28*28。(三)任务实施#定义展示训练样本图片函数defimshow(images):img=torchvision.utils.make_grid(images)npimg=img.numpy()plt.imshow(np.transpose(npimg,(1,2,0)))plt.show()说明:使用torchvision.utils中的make_grid类方法将一个批次的图片构造成网格模式。(三)任务实施#从训练集中拿出一批图像images,labels=next(iter(train_loader))imshow(images)print(labels)说明:用iter和next函数来获取取一个批次的图片数据和其对应的图片标签。构建CNN神经网络模型(函数定义一个LeNet-5网络,包含两个卷积层conv1和conv2,两个线性层作为输出,最后输出10个维度作为0-9的标识来确定识别出的是哪个数字。)(三)任务实施classConvNet(nn.Module):def__init__(self):super().__init__()#1*1*28*28#1个输入图片通道,10个输出通道,5x5卷积核self.conv1=nn.Conv2d(1,10,5)self.conv2=nn.Conv2d(10,20,3)(三)任务实施#全连接层、输出层softmax,10个维度self.fc1=nn.Linear(20*10*10,500)self.fc2=nn.Linear(500,10)#正向传播defforward(self,x):in_size=x.size(0)out=self.conv1(x)#1*10*24*24out=F.relu(out)
#1*10*12*12out=F.max_pool2d(out,2,2)(三)任务实施
#1*20*10*10out=self.conv2(out)out=F.relu(out)
#1*2000out=out.view(in_size,-1)#1*500
out=self.fc1(out)out=F.relu(out)out=self.fc2(out)#1*10out=F.log_softmax(out,dim=1)returnout(三)任务实施#生成模型model=ConvNet().to(DEVICE)print(model)运行结果:ConvNet((conv1):Conv2d(1,10,kernel_size=(5,5),stride=(1,1))(conv2):Conv2d(10,20,kernel_size=(3,3),stride=(1,1))(fc1):Linear(in_features=2000,out_features=500,bias=True)(fc2):Linear(in_features=500,out_features=10,bias=True))(三)任务实施#构建优化器optimizer=optim.Adam(model.parameters(),lr=0.0001)#定义训练函数deftrain(model,device,train_loader,optimizer,epoch):model.train()forbatch_idx,(data,target)inenumerate(train_loader):data,target=data.to(device),target.to(device)#输入样本和标签optimizer.zero_grad()#每次训练梯度清零output=model(data)#正向传播、反向传播和优化过程loss=F.nll_loss(output,target)(三)任务实施loss.backward()optimizer.step()#定义验证函数deftest(model,device,test_loader):model.eval()test_loss=0correct=0withtorch.no_grad():fordata,targetintest_loader:#输入样本和标签
(三)任务实施data,target=data.to(device),target.to(device)output=model(data)#将一批的损失相加test_loss+=F.nll_loss(output,target,reduction='sum’)#找到概率最大的下标pred=output.max(1,keepdim=True)[1]correct+=pred.eq(target.view_as(pred)).sum().item()test_loss/=len(test_loader.dataset)(三)任务实施#开始训练模型forepochinrange(1,EPOCHS+1):train(model,DEVICE,train_loader,optimizer,epoch)test(model,DEVICE,test_loader)说明:训练的过程是循环遍历数据迭代器,放入网络的输入层并优化。每次迭代训练时都先把所有梯度清零,否则会使梯度累加而导致训练错误和失效。(三)任务实施#保存模型torch.save(model.state_dict(),"./MNISTModel.pkl")运行结果:Testset:Averageloss:0.0393,Accuracy:9871/10000(99%)TrainEpoch:20[14848/60000(25%)]Loss:0.022141TrainEpoch:20[30208/60000(50%)]Loss:0.020308TrainEpoch:20[45568/60000(75%)]Loss:0.039529Testset:Averageloss:0.0392,Accuracy:9869/10000(99%)验证结果显示,模型在测试集上的准确率达到了99%,说明我们训练的卷积神经网络性能还是不错的。2、实现字符识别1)编写代码,从测试集里面抽取4张图片进行模型预测,实现字符识别。2)代码分析(三)任务实施model_eval=ConvNet()model_eval.load_state_dict(torch.load('./MNISTModel.pkl',map_location=DEVICE))model_eval.eval()#从测试集里面拿出几张图片进行模型预测images,labels=next(iter(test_loader))(三)任务实施测试样例(三)任务实施
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年福建泉州晋江市第五中学教师招聘顶岗教师1人笔试参考题库及答案解析
- 四川科瑞软件有限责任公司招聘人力综合岗笔试参考题库及答案解析
- 2026年10月上海中医药大学附属曙光医院业务科室副主任岗位招聘1人考试参考题库及答案解析
- 2026福建莆田城厢区壶兰实验小学招聘编外会计考试备考题库及答案解析
- 成都工业学院学报编辑部 校内公开招聘编辑人员(1人)笔试参考题库及答案解析
- 2026年和县统一战线服务中心公开选调工作人员5名笔试模拟试题及答案解析
- 2026湖南省农业科学院、岳麓山实验室第二批公开招聘30人考试模拟试题及答案解析
- 各种专项施工方案记忆(3篇)
- 广州线上美食活动策划方案(3篇)
- 去中心化营销方案(3篇)
- 矿山地质环境课件
- 人工智能通识- 课件 第四章 AI赋能工作
- 蛇串疮(带状疱疹)护理查房
- 知识产权法(第二版)张楚课件 第二十八章学习资料
- 2025年广西北部湾国际港务集团有限公司招聘笔试参考题库含答案解析
- 10千伏环网柜(箱)标准化设计方案 (2023 版)
- 经永存左上腔静脉植入CRT-D1例
- 17025实验室管理体系
- 安全文化手册-大唐
- 保密资格评分标准具体操作方法
- 4.1 整式(第1课时 单项式) 课件 七年级数学上册 (人教版2024)
评论
0/150
提交评论