深度学习实践教程(第二版)-课件 第5章多层全连接神经网络_第1页
深度学习实践教程(第二版)-课件 第5章多层全连接神经网络_第2页
深度学习实践教程(第二版)-课件 第5章多层全连接神经网络_第3页
深度学习实践教程(第二版)-课件 第5章多层全连接神经网络_第4页
深度学习实践教程(第二版)-课件 第5章多层全连接神经网络_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

深度学习第5章多层全连接神经网络5.1全连接神经网络(FC)5.2多分类问题5.3softmax与交叉熵5.4反向传播算法5.5计算机视觉工具包:torchvision25.6用全连接神经网络实现多分类课上练习第5章多层全连接神经网络5.1全连接神经网络(FC)全连接神经网络的准则很简单:神经网络中除输入层之外的每个节点都和上一层的所有节点有连接。3图5.1全连接神经网络示意图网络是几层?输出层有几个神经元?课堂练习(1)写出下面网络有

层,有

层隐藏层,输入层有

个神经元,输出层有

个神经元。答案:3、2、3、1多层全连接神经网络的作用?图像分类、目标检测、自然语言处理等如何用多层神经网络解决多分类问题?5第5章多层全连接神经网络5.2多分类问题6第5章多层全连接神经网络

图5.2单神经元工作原理5.2多分类问题7第5章多层全连接神经网络如何用图示表示?先看单个神经元在分类问题中的应用。

5.2多分类问题8第5章多层全连接神经网络??

图5.3代入数据的神经元5.2多分类问题9第5章多层全连接神经网络?

图5.3代入数据的神经元5.2多分类问题10第5章多层全连接神经网络

图5.3代入数据的神经元5.2多分类问题11第5章多层全连接神经网络多个图5.4中的神经元组合成的多层神经网络,如图5.5所示。图5.5多层神经网络5.2多分类问题12第5章多层全连接神经网络????????将图5.5神经网络模型元实例化,各值如图5.6所示。图5.6实例化的多层神经网络5.2多分类问题13第5章多层全连接神经网络??????将图5.5神经网络模型元实例化,各值如图5.6所示。图5.6实例化的多层神经网络5.2多分类问题14第5章多层全连接神经网络????将图5.5神经网络模型元实例化,各值如图5.6所示。图5.6实例化的多层神经网络5.2多分类问题15第5章多层全连接神经网络??将图5.5神经网络模型元实例化,各值如图5.6所示。图5.6实例化的多层神经网络5.2多分类问题16第5章多层全连接神经网络将图5.5神经网络模型元实例化,各值如图5.6所示。图5.6实例化的多层神经网络5.2多分类问题17第5章多层全连接神经网络将图5.5神经网络模型元实例化,各值如图5.6所示。图5.6实例化的多层神经网络5.3softmax与交叉熵softmax函数,又称归一化指数函数。它是二分类函数。Sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。18第5章多层全连接神经网络

5.3softmax与交叉熵19第5章多层全连接神经网络??????图5.7softmax函数示意图5.3softmax与交叉熵20第5章多层全连接神经网络图5.7softmax函数示意图5.3softmax与交叉熵21第5章多层全连接神经网络图5.8分类数字的多层网络示意图5.3softmax与交叉熵交叉熵是用来衡量两个概率分布的距离。交叉熵数值越小说明两个概率分布越接近。概率分布:即[0.1,0.5,0.2,0.1,0.1],每个类别的概率都在0-1,且加起来为1。若有两个概率分布p(x)和q(x),通过q来表示p的交叉熵为:22第5章多层全连接神经网络5.3softmax与交叉熵假设有一个三分类问题,某个样本的真实分类结果是(1,0,0),第一个模型经过Softmax函数之后的预测结果是(0.5,0.4,0.1),那么它们的交叉熵为:

另一个模型的预测结果为:(0.8,0.1,0.1),则它们的交叉熵为?请同学们计算。

23第5章多层全连接神经网络在后面的代码实现中,我们将用交叉熵定义损失函数(criterion=nn.CrossEntropyLoss())下一页5.4反向传播算法5.4.1链式法则24第5章多层全连接神经网络首先介绍一下链式法则,考虑一个简单的函数,比如:当然可以直接求出这个函数的微分,但是这里我们要使用链式法则,令:那么f=qz对于这两个式子,可以分别求出它们的微分:同时q是x和y的求和,所以能够得到:5.4反向传播算法5.4.1链式法则25第5章多层全连接神经网络我们关心的问题是:链式法则则告诉我们如何来计算出他们的值:5.4反向传播算法5.4.2反向传播实例26第5章多层全连接神经网络了解了链式法则,我们就可以开始介绍反向传播算法了,本质上反向传播算法只是链式法则的一个应用。仍然使用5.4.1中的那个例子:q=x+y,f=qz。在一个计算图中,输入是x=-2,y=5,z=-4,计算为q=x+y,通过计算图可以将这个计算过程表达出来,如图5.9所示。图5.9计算图5.4反向传播算法5.4.2反向传播实例27第5章多层全连接神经网络上面的数字表示其数值,下面的数字表示求出的梯度,可以一步一步看看反向传播算法的实现。首先从最后开始,梯度当然是1,然后计算接着计算

5.5计算机视觉工具包:torchvisiontorchvision主要包含以下三部分:models、datasets、transforms。models:提供深度学习中各种经典网络结构及预训练好的模型,包括AlexNet、VGG系列、ResNet系列、Inception系列等。datasets:提供常用的数据集下载,设计上都是继承torch.utils.data.Dataset,主要包括MNIST、CIFAR10/100、ImageNet、COCO等。28第5章多层全连接神经网络5.5计算机视觉工具包:torchvisiontransforms:提供常用的数据预处理操作,主要包括对Tensor及PILImage对象的操作。transforms中涵盖了大部分对Tensor和PILImage的常用处理。对PILImage的操作包括:(1)Scale:调整图片尺寸,长宽比保持不变。(2)CenterCrop、RandomCrop、RandomResizedCrop:裁剪图片。(3)Pad:填充。(4)ToTensor:将PILImage对象转成Tensor,会自动将[0,255]归一化至[0,1]。对Tensor的操作包括:(1)Normalize:标准化(减均值,除以标准差)。(2)ToPILImage:将Tensor转为PILImage对象。29第5章多层全连接神经网络5.5计算机视觉工具包:torchvisiontorchvision还提供了两个常用的函数。一个是make_grid,它能将多张图片拼接成一个网格中。

另一个是save_img,它能将Tensor保存成图片。30第5章多层全连接神经网络5.6用全连接神经网络实现多分类5.6.1定义网络我们从最简单的网络建起,然后建立一个加入激励函数的网络,最后建立一个加入批标准化函数的网络。31第5章多层全连接神经网络5.6用全连接神经网络实现多分类5.6.2全连接识别MNIST手写数字

MNIST数据集

训练集(trainingset)由来自250个不同人手写的数字构成,其中50%是高中学生,50%来自人口普查局(theCensusBureau)的工作人员,一共有60000张图片。测试集(testset)也是同样比例的手写数字数据,一共有10000张图片。。32第5章多层全连接神经网络5.6用全连接神经网络实现多分类5.6.2全连接识别MNIST手写数字

33第5章多层全连接神经网络图5.11MNIST数据集举例5.6用全连接神经网络实现多分类5.6.2全连接识别MNIST手写数字第一步:导入要用的包、定义超参数,比如训练中每批多少图片(batch_size),学习率(learning_rate),迭代次数numepoches。第二步:定义带有激活函数和批标准化的网络。第三步:对数据进行标准化预处理。第四步:下载MNIST数据集。第五步:导入网络、定义损失函数和优化方法。第六步:训练网络模型第七步:测试网络34第5章多层全连接神经网络5.6用全连接神经网络实现多分类5.6.2全连接识别MNIST手写数字建立最简单的网络,将其命名为simpleNet。fromtorchimportnnclasssimpleNet(nn.Module):#定义一个最简单的三层全连接神经网络,每一层都是线性的def__init__(self,in_dim,n_hidden_1,n_hidden_2,out_dim):super(simpleNet,self).__init__()self.layer1=nn.Linear(in_dim,n_hidden_1)self.layer2=nn.Linear(n_hidden_1,n_hidden_2)self.layer3=nn.Linear(n_hidden_2,out_dim)defforward(self,x):x=self.layer1(x)x=self.layer2(x)x=self.layer3(x)returnx35第5章多层全连接神经网络5.6用全连接神经网络实现多分类5.6.2全连接识别MNIST手写数字改进一下simpleNet网络,添加激励函数,增强网络的非线性,将新网络命名为Activation_Net。fromtorchimportnnclassActivation_Net(nn.Module):#在上面的simpleNet网络的基础上,在每层的输出部分添加激励函数def__init__(self,in_dim,n_hidden_1,n_hidden_2,out_dim):

super(Activation_Net,self).__init__()self.layer1=nn.Sequential(nn.Linear(in_dim,n_hidden_1),nn.ReLU(True))self.layer2=nn.Sequential(nn.Linear(n_hidden_1,n_hidden_2),nn.ReLU(True))self.layer3=nn.Sequential(nn.Linear(n_hidden_2,out_dim))#这里的nn.Sequential()函数的功能是将网络的层组合到一起defforward(self,x):x=self.layer1(x)x=self.layer2(x)x=self.layer3(x)returnx36第5章多层全连接神经网络5.6用全连接神经网络实现多分类5.6.2全连接识别MNIST手写数字最后,增加一个加快收敛速度的函数——批标准化函数,将新网络命名为Batch_Net。fromtorchimportnnclassBatch_Net(nn.Module):#在上面的Activation_Net网络的基础上,增加一个加快收敛速度的函数——批标准化函数def__init__(self,in_dim,n_hidden_1,n_hidden_2,out_dim):

super(Batch_Net,self).__init__()self.layer1=nn.Sequential(nn.Linear(in_dim,n_hidden_1),nn.BatchNorm1d(n_hidden_1),nn.ReLU(True))self.layer2=nn.Sequential(nn.Linear(n_hidden_1,n_hidden_2),nn.BatchNorm1d(n_hidden_2),nn.ReLU(True))self.layer3=nn.Sequential(nn.Linear(n_hidden_2,out_dim))defforward(self,x):x=self.layer1(x)x=self.layer2(x)x=self.layer3(x)returnx37第5章多层全连接神经网络5.6用全连接神经网络实现多分类5.6.2全连接识别MNIST手写数字第一步:导入包、定义超参数。超参数包括训练时每次输入多少张图片(batch_size)、学习率(learning_rate)、迭代次数(num_epoches)等。importtorchfromtorchimportnn,optimfromtorch.autogradimportVariablefromtorch.utils.dataimportDataLoaderfromtorchvisionimportdatasets,transformsbatch_size=64learning_rate=0.02num_epoches=10038第5章多层全连接神经网络5.6用全连接神经网络实现多分类5.6.2全连接识别MNIST手写数字第二步:建立带有激励函数和批标准化函数的网络。classBatch_Net(nn.Module)def__init__(self,in_dim,n_hidden_1,n_hidden_2,out_dim):super(Batch_Net,self).__init__()self.layer1=nn.Sequential(nn.Linear(in_dim,n_hidden_1),nn.BatchNorm1d(n_hidden_1),nn.ReLU(True))self.layer2=nn.Sequential(nn.Linear(n_hidden_1,n_hidden_2),nn.BatchNorm1d(n_hidden_2),nn.ReLU(True))self.layer3=nn.Sequential(nn.Linear(n_hidden_2,out_dim))defforward(self,x):x=self.layer1(x)x=self.layer2(x)x=self.layer3(x)returnx39第5章多层全连接神经网络5.6用全连接神经网络实现多分类5.6.2全连接识别MNIST手写数字第三步:对数据进行标准化预处理。data_tf=transforms.Compose([transforms.ToTensor(),transforms.Normalize([0.5],[0.5])])第四步:导入MNIST数据集。train_dataset=datasets.MNIST(root='./data',train=True,transform=data_tf,download=True)test_dataset=datasets.MNIST(root='./data',train=False,transform=data_tf)train_loader=DataLoader(train_dataset,batch_size=batch_size,shuffle=True)test_loader=DataLoader(test_dataset,batch_size=batch_size,shuffle=False)40第5章多层全连接神经网络5.6用全连接神经网络实现多分类5.6.2全连接识别MNIST手写数字第五步:导入神经网络模型,定义损失函数和优化函数。model=Batch_Net(28*28,300,100,10)#定义损失函数和优化函数criterion=nn.CrossEntropyLoss()optimizer=optim.SGD(model.parameters(),lr=learning_rate)41第5章多层全连接神经网络5.6用全连接神经网络实现多分类5.6.2全连接识别MNIST手写数字第六步:训练模型。epoch=0fordataintrain_loader:img,label=dataimg=img.view(img.size(0),-1)#这段程序以后读者会经常看到,其含义是如果有GPU,则使用iftorch.cuda.is_available():img=img.cuda()label=label.cuda()else:

42第5章多层全连接神经网络5.6用全连接神经网络实现多分类5.6.2全连接识别MNIST手写数字第六步:训练模型。else:img=Variable(img)label=Variable(label)out=model(img)loss=criterion(out,label)print_loss=loss.data.item()optimizer.zero_grad()loss.backward()optimizer.step()epoch+=1ifepoch%100==0:print('epoch:{},loss:{:.4}'.format(epoch,loss.data.item()))43第5章多层全连接神经网络5.6用全连接神经网络实现多分类5.6.2全连接识别MNIST手写数字第七步:测试模型。model.eval()eval_loss=0eval_acc=0fordataintest_loader:img,label=dataimg=img.view(img.size(0),-1)iftorch.cuda.is_available():img=img.cuda()label=label.cuda()out=model(img)loss=criterion(out,label)eval_loss+=loss.data.item()*label.size(0)_,pred=torch.max(out,1)

44第5章多层全连接神经网络5.6用全连接神经网络实现多分类5.6.2全连接识别MNIST手写数字第七步:测试模型。num_correct=(pred==label).sum()eval_acc+=num_correct.item()print('Testloss:{:.6f},Acc:{:.6f}'.format(eval_loss/(len(test_dataset)),eval_acc/(len(test_dataset))))45第5章多层全连接神经网络5.6用全连接神经网络实现多分类5.6.2全连接识别MNIST手写数字程序运行结果如下:epoch:100,loss:0.5478epoch:200,loss:0.4439epoch:300,loss:0.2936epoch:400,loss:0.311epoch:500,loss:0.2003epoch:600,loss:0.3013epoch:700,loss:0.194epoch:800,

温馨提示

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

评论

0/150

提交评论