人工智能应用基础 课件 任务3-5 PaddlePaddle基础知识、线性回归-预测程序员月薪、卷积神经网络-猫狗分类_第1页
人工智能应用基础 课件 任务3-5 PaddlePaddle基础知识、线性回归-预测程序员月薪、卷积神经网络-猫狗分类_第2页
人工智能应用基础 课件 任务3-5 PaddlePaddle基础知识、线性回归-预测程序员月薪、卷积神经网络-猫狗分类_第3页
人工智能应用基础 课件 任务3-5 PaddlePaddle基础知识、线性回归-预测程序员月薪、卷积神经网络-猫狗分类_第4页
人工智能应用基础 课件 任务3-5 PaddlePaddle基础知识、线性回归-预测程序员月薪、卷积神经网络-猫狗分类_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

任务3PaddlePaddle基础知识任务3PaddlePaddle基础知识010203张量动态图模型开发一、张量PaddlePaddle与Python中的科学计算库(Numpy)类似,提供大量的计算操作,在计算过程中用到的常量称为张量(Tensor),PaddlePaddle支持动态图和静态图,张量是数据流图中节点之间相互流通数据的表现形式,比如一维数组、二维数组等都可以理解为张量,表示相关操作的输出。一、张量PaddlePaddle在深度学习方面拥有强大的计算能力,可以创建多种不同形式的张量,在提供的API中,常用的函数有randn、arange和To_tensor等,具体如下所示。(1)randnrandn函数返回符合标准正态分布的随机张量,形状为shape,数据类型为dtype,语法格式为:paddle.randn(shape,

dtype=None,

name=None)(2)arangearange函数返回以步长step均匀分隔给定数值区间[start,end)的1-DTensor,数据类型为dtype,语法格式为:paddle.arange(start=0,

end=None,

step=1,

dtype=None,

name=None)一、张量(3)To_tensorTo_tensor函数将PIL.Image或numpy.ndarray转换成paddle.Tensor。将形状为(HxWxC)的输入数据PIL.Image或numpy.ndarray转换为(CxHxW)。如果想保持形状不变,可以将参数data_format设置为'HWC'。语法格式为:paddle.vision.transforms.to_tensor(pic,

data_format='CHW')二、动态图PaddlePaddle从2.0版本开始默认开启动态图开发模式,使用动态图开发模式,每次执行一个运算,立刻能够得到结果。在使用动态图过程中,除了引入paddle库还需要引入numpy库。示例代码如下所示。importpaddleimportpaddle.nn.functionalasFimportnumpyasnp二、动态图在使用动态图过程中,有以下优势:a=paddle.randn([4,2])b=paddle.arange(1,3,dtype='float32')print(a)print(b)A动态图模式下,可以直接运行飞桨提用的randn或者arange等函数,会立刻返回结果,不需要创建一个计算图,再对给定的数据进行运算,示例代码如下所示。动态图模式下,可以使用Python的条件判断和循环,用来执行神经网络的计算,示例代码如下所示。二、动态图a=paddle.to_tensor(np.array([1,2,3]))b=paddle.to_tensor(np.array([4,5,6]))foriinrange(10):r=paddle.rand([1,])ifr>0.5:c=paddle.pow(a,i)+bprint("{}+>{}".format(i,c.numpy()))else:c=paddle.pow(a,i)-bprint("{}->{}".format(i,c.numpy()))B使用动态图,可以根据控制流选择不同的分支网络同时方便构建权重共享网络,示例代码如下所示。二、动态图inputs=paddle.rand((256,64))linear=paddle.nn.Linear(64,8,bias_attr=False)loss_fn=paddle.nn.MSELoss()optimizer=paddle.optimizer.Adam(0.01,parameters=linear.parameters())foriinrange(10):hidden=linear(inputs)#weightfrominputtohiddenissharedwiththelinearmappingfromhiddento#outputoutputs=paddle.matmul(hidden,linear.weight,transpose_y=True)loss=loss_fn(outputs,inputs)loss.backward()print("step:{},loss:{}".format(i,loss.numpy()))optimizer.step()optimizer.clear_grad()C三、模型开发1、数据处理(1)数据收集内置数据集在训练模型的过程中,第一步就是对数据进行收集,PaddlePaddle框架将常用的数据集封装到了API中,在使用过程中,可以直接调用API进行查看,存放数据集的主要目录为paddle.vision.datasets与paddle.text。三、模型开发内置数据集查看PaddlePaddle中包含的数据集,示例代码如下所示。importpaddleprint('视觉相关数据集:',paddle.vision.datasets.__all__)print('自然语言相关数据集:',paddle.text.__all__)在调用内部提供的数据集时,可用mode来表示训练集与测试集,数据集接口会自动从远端下载数据集到本机缓存目录~/.cache/paddle/dataset。示例代码如下所示。frompaddle.vision.transformsimportToTensor#训练数据集用ToTensor将数据格式转为Tensortrain_dataset=paddle.vision.datasets.MNIST(mode='train',transform=ToTensor())#验证数据集val_dataset=paddle.vision.datasets.MNIST(mode='test',transform=ToTensor())三、模型开发自定义数据集在实际应用过程中,发现内置的数据集并不能满足要求,需要自己根据已有的相关数据来定义数据集,示例代码如下所示。importpaddlefrompaddle.ioimportDatasetBATCH_SIZE=64BATCH_NUM=20IMAGE_SIZE=(28,28)CLASS_NUM=10classMyDataset(Dataset):三、模型开发自定义数据集在实际应用过程中,发现内置的数据集并不能满足要求,需要自己根据已有的相关数据来定义数据集,示例代码如下所示。"""步骤一:继承paddle.io.Dataset类"""def__init__(self,num_samples):"""步骤二:实现构造函数,定义数据集大小"""super(MyDataset,self).__init__()self.num_samples=num_samplesdef__getitem__(self,index):三、模型开发"""步骤一:继承paddle.io.Dataset类"""def__init__(self,num_samples):"""步骤二:实现构造函数,定义数据集大小"""super(MyDataset,self).__init__()self.num_samples=num_samplesdef__getitem__(self,index):"""步骤三:实现__getitem__方法,定义指定index时如何获取数据,并返回单条数据(训练数据,对应的标签)"""data=paddle.uniform(IMAGE_SIZE,dtype='float32')label=paddle.randint(0,CLASS_NUM-1,dtype='int64')returndata,labeldef__len__(self):三、模型开发"""步骤四:实现__len__方法,返回数据集总数目"""returnself.num_samples#测试定义的数据集custom_dataset=MyDataset(BATCH_SIZE*BATCH_NUM)print('=============customdataset=============')fordata,labelincustom_dataset:print(data.shape,label.shape)break三、模型开发(2)数据加载在PaddlePaddle中,对数据加载需要调用paddle.io.DataLoader函数,示例代码如下所示。在代码中定义一个数据迭代器train_loader,用于加载训练数据。通过batch_size=64设置数据集的批大小为64,通过shuffle=True,在取数据前会打乱数据。train_loader=paddle.io.DataLoader(custom_dataset,batch_size=BATCH_SIZE,shuffle=True)#如果要加载内置数据集,将custom_dataset换为train_dataset即可forbatch_id,datainenumerate(train_loader()):x_data=data[0]y_data=data[1]print(x_data.shape)print(y_data.shape)break三、模型开发(3)数据预处理获取数据后,如果不对数据进行处理的话,会出现拟合的问题,在PaddlePaddle中,提供了数据增强API(定义在领域目录的transforms下),对训练数据做增强,使数据进行处理得到不同的图像,从而泛化数据集。基于框架内置数据集针对PaddlePaddle框架中的内置数据集,可以使用paddle.vision.transforms下的方法,常用方法如图所示。三、模型开发三、模型开发示例:对内置数据集MNIST数据集随机调整亮度、对比度、饱和度和改变图片大小,示例代码如下所示。frompaddle.vision.transformsimportCompose,Resize,ColorJitter#定义想要使用的数据增强方式,包括随机调整亮度、对比度和饱和度,改变图片大小transform=Compose([ColorJitter(),Resize(size=32)])#通过transform参数传递定义好的数据增强方法即可完成对自带数据集的增强train_dataset=paddle.vision.datasets.MNIST(mode='train',transform=transform)三、模型开发自定义数据集importpaddlefrompaddle.ioimportDatasetfrompaddle.vision.transformsimportCompose,ResizeBATCH_SIZE=64BATCH_NUM=20IMAGE_SIZE=(28,28)CLASS_NUM=10classMyDataset(Dataset):def__init__(self,num_samples):super(MyDataset,self).__init__()self.num_samples=num_samples#在`__init__`中定义数据增强方法,此处为调整图像大小self.transform=Compose([Resize(size=32)])三、模型开发def__getitem__(self,index):data=paddle.uniform(IMAGE_SIZE,dtype='float32')#在`__getitem__`中对数据集使用数据增强方法data=self.transform(data.numpy())label=paddle.randint(0,CLASS_NUM-1,dtype='int64')returndata,labeldef__len__(self):returnself.num_samples#测试定义的数据集custom_dataset=MyDataset(BATCH_SIZE*BATCH_NUM)print('=============customdataset=============')fordata,labelincustom_dataset:print(data.shape,label.shape)break三、模型开发2、模型组网(1)内置模型在PaddlePaddle框架中内置了计算机视觉领域的常用模型,在进行计算机视觉任务实现过程中,可以通过调用内置的模型,这些内置模型存储在paddle.vision.models目录下,可以通过以下命令查看内置的网络模型。print('飞桨框架内置模型:',paddle.vision.models.__all__)如果想调用飞桨框架内置模型中的LeNet模型,示例代码如下所示。lenet=paddle.vision.models.LeNet()三、模型开发2、模型组网可以使用paddle.summary()方法查看模型的每一层输入输出,示例代码如下所示。paddle.summary(lenet,

(64,

1,

28,

28))运行代码,会发现显示出lenet模型的结构和输入输出,以及lenet模型中包含的数据,如图所示。三、模型开发(2)使用Sequential构建模型的语法格式如下所示。classpaddle.nn.Sequential(*layers)使用Sequential构建模型示例代码如下所示。importpaddle#Sequential形式组网mnist=paddle.nn.Sequential(#构造一个Flatten类的可调用对象paddle.nn.Flatten(),#定义一个线性变换层,输入值为28*28=784,输出层为512。paddle.nn.Linear(784,512),#使用ReLU激活函数paddle.nn.ReLU(),#正则化数据,设置丢弃代理为0.2paddle.nn.Dropout(0.2),paddle.nn.Linear(512,10))三、模型开发(3)在forward中使用声明的Layer变量进行前向计算。示例代码如下所示。#Layer类继承方式组网classMnist(paddle.nn.Layer):def__init__(self):super(Mnist,self).__init__()self.flatten=paddle.nn.Flatten()self.linear_1=paddle.nn.Linear(784,512)self.linear_2=paddle.nn.Linear(512,10)self.relu=paddle.nn.ReLU()self.dropout=paddle.nn.Dropout(0.2)defforward(self,inputs):y=self.flatten(inputs)y=self.linear_1(y)y=self.relu(y)y=self.dropout(y)y=self.linear_2(y)returnymnist_2=Mnist()三、模型开发3、模型训练第一步:通过Sequential方法对模型进行组网,通过paddle.Model对模型进行封装。#定义网络结构(采用Sequential组网方式)mnist=paddle.nn.Sequential(paddle.nn.Flatten(1,-1),paddle.nn.Linear(784,512),paddle.nn.ReLU(),paddle.nn.Dropout(0.2),paddle.nn.Linear(512,10))model=paddle.Model(mnist)三、模型开发3、模型训练第二步:在使用Model.fit进行模型训练时,需要通过Model.prepare()接口提前配置模型优化器、Loss计算方法和精度计算方法等。#为模型训练做准备,设置优化器,损失函数和精度计算方式model.prepare(paddle.optimizer.Adam(parameters=model.parameters()),paddle.nn.CrossEntropyLoss(),paddle.metric.Accuracy())三、模型开发3、模型训练第三步:做好准备工作后,调用fit()来启动训练过程,fit中主要包含训练数据集、训练轮次和单次训练数据批次大小。#启动模型训练,指定训练数据集,设置训练轮次,设置每次数据集计算的批次大小,设置日志格式model.fit(train_dataset,epochs=5,batch_size=64,verbose=1)三、模型开发3、模型训练第四步:训练好的模型进行评估可以使用evaluate()。#用evaluate在测试集上对模型进行验证eval_result=model.evaluate(test_dataset,verbose=1)第五步:使用model.predict()对训练好的模型进行预测验证,验证过程中只需要使用训练好的模型对预测测试数据进行计算即可。#用predict在测试集上对模型进行测试test_result=model.predict(test_dataset)四、任务实施采用uci-housing数据集,这是经典线性回归的数据集。数据集共7084条数据,可以拆分成506行,每行14列。前13列用来描述房屋的各种信息,最后一列为该类房屋价格中位数。前13列用来描述房屋的各种信息。1、任务背景四、任务实施2、实验思路感谢观看任务4线性回归—预测程序员月薪任务4线性回归—预测程序员月薪010203机器学习线性回归sklearn库一、机器学习1、什么是机器学习机器学习是实现人工智能的一种途径,它是让计算机通过一定的算法去分析数据中存在的规律,不断提升对新数据预测性能的过程。换一种说法机器学习是研究计算机如何模拟或实现人类的学习行为。我们可以将这种关系以模型权重的方式存储下来,进而使用模型对未知结果的学生进行预测。这里的权重表示专业课和选修课对结果的影响程度是不同的。1分类算法2回归算法3聚类算法一、机器学习2、机器学习算法分类二、线性回归如图所示,横轴表示房屋面积,纵轴表示房价,图中散点是部分抽样的数据。那么从散点分布上来看,自变量房屋面积与房价之间存在着一定的线性关系,y=ax+b。直线与x轴夹角的正切就是斜率a,直线与y轴的交点也就是截距b。我们把上面一元函数中的参数代号变换一下,即把a变成w,那么函数形式就变成了y=wx+b,这就成了机器学习中一元线性回归模型的表述,这里的w就称为权重,b称为偏置。三、sklearn库sklearn是针Python编程语言的免费机器学习库,广泛地用于实际生产工作中,使用sklearn进行机器学习,能有效地降低学习门槛。sklearn是一款开源的Python机器学习库,它基于NumPy和SciPy,提供了大量用于数据挖掘和分析的工具,以及支持多种算法的一系列接口。在派Lab实训环境中已经内置了sklearn库,如果想要使用sklearn中的某些方法,我们首先要导入sklearn库。#导入sklearn包,并将其命名为skimportsklearnassk#查看sklearn包是否导入成功sk三、sklearn库如果显示以下结果,则表示导入成功。<module'sklearn'from'/opt/conda/lib/python3.9/site-packages/sklearn/__init__.py'>四、任务实施回归问题就是预测自变量与因变量之间的关系,是机器学习中常见的基本问题。本任务将通过构建线性回归模型实现对程序员月薪的自动预测,从而学习机器学习中的线性回归算法的基本原理以及熟练掌握线性回归算法的应用流程。预测程序员月薪使用的数据集包含1800名程序员的样本数据,其中包含程序员的性别、年龄、工龄(入职月数)、月薪。1、任务背景四、任务实施2、实验思路感谢观看任务5

卷积神经网络—猫狗分类任务5

卷积神经网络—猫狗分类0102机器学习分类卷积神经网络概述一、机器学习分类1、监督学习监督学习是指已知样本的结果(比如考试答案,生产结果等),使其达到所要求性能或结果的过程,主要任务是通过标记的训练数据来推断一个其中对应的功能,其训练数据包括类别信息(数据标签和特征),如图所示有一个样本唐老鸭和根据它的特征定义的模型,从而得出结果是它属于鸭子类。线性回归属于监督学习。一、机器学习分类2、非监督学习非监督学习也称为无监督学习,其样本中只含有特征,不包含标签信息,因此在训练时并不知道分类的结果是否正确。如图所示,有一群小动物没有任何标签,让机器自己学习来对小动物进行归类,把有相似特征的归属于一类,把五个小动物分为了两组一组有鸭子的特征,另一组包含的是其他动物。一、机器学习分类2、非监督学习当有新数据(另一个鸭子)来的时候会把预测模型拿出来比对,对他进行归类。如图所示,它属于鸭子类。二、卷积神经网络概述CNN可以应用在场景分类,图像分类,现在还可以应用到自然语言处理(NLP)方面的很多问题,比如句子分类等。下面如图是一个简单的CNN结构,这个网络结构是用于一个四类分类的问题,分别是狗、猫、船和鸟,图中的输入图片是属于船一类。二、卷积神经网络概述1、输入层输入层负责神经网络的数据输入,例如在处理图像时,输入层代表图片的像素矩阵。在卷积神经网络中用三维张量类型表示(Length,Width,Channel),Length和Width代表图像大小尺寸,Channel代表图像的色彩通道,例如黑白图像的深度为1,彩色图像(RGB色彩模式)的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论