深度学习实践教程(第二版)-课件 第6章卷积神经网络_第1页
深度学习实践教程(第二版)-课件 第6章卷积神经网络_第2页
深度学习实践教程(第二版)-课件 第6章卷积神经网络_第3页
深度学习实践教程(第二版)-课件 第6章卷积神经网络_第4页
深度学习实践教程(第二版)-课件 第6章卷积神经网络_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

深度学习第6章卷积神经网络6.1深度前馈网络6.2全连接网络和卷积神经网络6.3卷积神经网络原理6.4卷积层6.5池化层26.6CNN架构6.7经典CNN-LeNet56.8经典CNN-VGGNet6.9经典CNN-ResNet课上练习3第6章卷积神经网络第6章卷积神经网络20世纪80年代全连接网络提出的时候计算机硬件是什么状况?4微博网友爆出80年代的报纸电脑配置亮了!从图中可以看到,最新到货、最右价格的SUPERPC机由中科院计算机中心公司销售,配置:单显:756*380,内存:640K、软驱:360K*2、接口:一串一并,售价6480元。第6章卷积神经网络第五章实验:设计一个五层全连接神经网络,实现给MNIST数据集分类。其中:batch_size=32,learning_rate=0.01,epochs=100,input_size=28*28,hidden_size1=400,hidden_size2=300,hidden_size3=200,hidden_size4=100。隐藏层中要带有激励函数ReLU()和批标准化函数。要表达这样一个很小的神经网络需要的权重个数?784×400+400×300+300×200+200×100+100×10=520200个。如果每个权重用4字节的浮点数表示,网络占的内存空间大小?这些权重会占用2080800字节,约1.98MB超出了同一时代的计算机内存容量。第6章卷积神经网络6.1全连接网络和卷积神经网络图6.2卷积神经网络、全连接神经网络对比图6立体结构平面结构结构区别?第6章卷积神经网络6.2深度前馈网络卷积神经网络(ConvolutionalNeuralNetwork,CNN)和循环神经网络(RecurrentNeuralNetwork,RNN)都是前馈神经网络的一种。在前馈神经网络中,不同的神经元属于不同的层,每一层的神经元可以接收上一层的神经元信号,并产生信号输出到下一层。第0层叫做输入层,最后一层叫做输出层,中间的叫做隐藏层,整个网络中无反馈,信号从输入层到输出层单向传播,可用一个有向无环图表示。

7

卷积神经网络成功的原因在于其采用的局部连接和权值共享的方式,一方面减少了权值的数量,使得网络易于优化,另一方面降低了模型的复杂度,也就是减小了过拟合的风险。第6章卷积神经网络6.3卷积神经网络原理8第6章卷积神经网络6.3卷积神经网络原理9卷积层池化层全连接层卷积层怎么识别这些图像局部呢?第6章卷积神经网络6.3卷积神经网络原理卷积神经网络的三个思想根源如下:1、局部性:是指通过检测图片中的局部特征来决定图片的类别。10比如:要检测下图中是不是鸟,通常会检测“是否有鸟嘴”这个特征。第6章卷积神经网络6.3卷积神经网络原理卷积神经网络的三个思想根源如下:2、相同性:是指检测不同的图片是否具有相同的特征,虽然这些特征可能会出现在不同的位置上。11第6章卷积神经网络6.3卷积神经网络原理卷积神经网络的三个思想根源如下:3、不变性:不变性是指对一张图片进行下采样时,图片的性质基本保持不变。12第6章卷积神经网络6.4卷积层如何工作?13第6章卷积神经网络6.4卷积层如何工作?14卷积核卷积课堂练习6.4卷积层15卷积就是做滤波器和输入图像的矩阵内积操作,如图6.6所示:课堂练习6.4卷积层16卷积就是做滤波器和输入图像的矩阵内积操作,如图6.6所示:-2第6章卷积神经网络6.4卷积层在卷积中要设定的参数:1.滤波器的长宽高2.步长:步长表示滤波器每次移动的距离。3.边界填充:在图片卷积操作之前,沿着图片边缘用0进行边界填充。17

课堂练习6.4卷积层18当输入图片的尺寸为5×5×3,滤波器尺寸为3×3,步长为1,边界填充的大小为0时,计算出输出图片的尺寸为

。输出图片的尺寸:3×3×3

课堂练习6.4卷积层19卷积层代码的实现:卷积在PyTorch中通常采用torch.nn.Conv2d()函数实现。【例6.1】卷积层的代码实现。importnumpyasnpimporttorchfromtorchimportnnfromtorch.autogradimportVariablefromPILimportImageimportmatplotlib.pyplotaspltimportpylabim=Image.open('./dog.jpg').convert('L')#读入一张灰度图片im=np.array(im,dtype='float32')#将其转换为一个矩阵#可视化图片课堂练习6.4卷积层20卷积层代码的实现:卷积在PyTorch中通常采用torch.nn.Conv2d()函数实现。【例6.1】卷积层的代码实现。plt.imshow(im.astype('uint8'),cmap='gray')pylab.show()#将图片矩阵转换为PyTorch中的Tensor,并适配卷积输入的要求im=torch.from_numpy(im.reshape((1,1,im.shape[0],im.shape[1])))#使用nn.Conv2d()函数conv1=nn.Conv2d(1,1,3,bias=False)#定义卷积sobel_kernel=np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]],dtype='float32')#定义轮廓检测算子sobel_kernel=sobel_kernel.reshape((1,1,3,3))#适配卷积的输入/输出conv1.weight.data=torch.from_numpy(sobel_kernel)#给卷积的卷积核赋值edge1=conv1(Variable(im))#作用在图片上edge1=edge1.data.squeeze().numpy()#将输出转换为图片的格式plt.imshow(edge1,cmap='gray')pylab.show()同学运行程序第6章卷积神经网络6.5池化层池化层的作用有:1.特征降维,避免过拟合2.空间不变性:池化层能在图片空间变化(旋转、压缩、平移)时而保证其特征不变。

3.减少参数,降低训练难度。21第6章卷积神经网络6.5池化层2种不同的池化过程:22图6.9最大池化(max-pooling)第6章卷积神经网络6.5池化层2种不同的池化过程:23图6.10平均池化(mean-pooling)第6章卷积神经网络6.5池化层24在PyTorch中常用nn.MaxPool2d()函数实现最大池化处理。【例6.2】nn.MaxPool2d()函数的使用。importnumpyasnpimporttorchfromtorchimportnnfromtorch.autogradimportVariablefromPILimportImageimportmatplotlib.pyplotaspltimportpylabim=Image.open('./dog.jpg').convert('L')#读入一张灰度图片im=np.array(im,dtype='float32')#将其转换为一个矩阵#可视化图片plt.imshow(im.astype('uint8'),cmap='gray')pylab.show()第6章卷积神经网络6.5池化层25#将图片矩阵转换为PyTorch中的Tensor,并适配卷积输入的要求im=torch.from_numpy(im.reshape((1,1,im.shape[0],im.shape[1])))pool1=nn.MaxPool2d(2,2)print('beforemaxpool,imageshape:{}x{}'.format(im.shape[2],im.shape[3]))small_im1=pool1(Variable(im))small_im1=small_im1.data.squeeze().numpy()print('aftermaxpool,imageshape:{}x{}'.format(small_im1.shape[0],small_im1.shape[1]))plt.imshow(small_im1,cmap='gray')pylab.show()第6章卷积神经网络6.6CNN架构卷积神经网络主要有卷积层、激活函数、池化层、全连接层。26第6章卷积神经网络6.6卷积神经网络的代码实现27下面给出用一个具有三个卷积层、一个池化层、一个全连接层的卷积神经网络给MNIST数据集分类的示例。代码如下:importtorchfromtorchimportnn,optimfromtorch.autogradimportVariablefromtorch.utils.dataimportDataLoaderfromtorchvisionimportdatasets,transforms#定义一些超参数batch_size=64learning_rate=0.02num_epoches=20"""数据预处理。transforms.ToTensor()函数将图片转换成PyTorch中的Tensor,并且进行归一化(0~1之间)""""""transforms.Normalize()函数做标准化。它进行了减均值,再除以标准差的操作。函数的两个参数分别是均值和标准差""""""transforms.Compose()函数将各种预处理的操作组合到一起"""data_tf=transforms.Compose([transforms.ToTensor(),transforms.Normalize([0.5],[0.5])])第6章卷积神经网络6.6卷积神经网络的代码实现28下面给出用一个具有三个卷积层、一个池化层、一个全连接层的卷积神经网络给MNIST数据集分类的示例。代码如下:#数据集的下载train_dataset=datasets.MNIST(r'.\data',train=True,transform=data_tf,download=True)test_dataset=datasets.MNIST(r'.\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)classCNN(nn.Module):def__init__(self):super(CNN,self).__init__()self.layer1=nn.Sequential(nn.Conv2d(1,25,kernel_size=3),nn.BatchNorm2d(25),nn.ReLU(inplace=True))第6章卷积神经网络6.6卷积神经网络的代码实现29下面给出用一个具有三个卷积层、一个池化层、一个全连接层的卷积神经网络给MNIST数据集分类的示例。

self.layer2=nn.Sequential(nn.MaxPool2d(kernel_size=2,stride=2))self.layer3=nn.Sequential(nn.Conv2d(25,50,kernel_size=3),nn.BatchNorm2d(50),nn.ReLU(inplace=True))self.layer4=nn.Sequential(nn.MaxPool2d(kernel_size=2,stride=2))self.fc=nn.Sequential(nn.Linear(50*5*5,1024),nn.ReLU(inplace=True),nn.Linear(1024,128),nn.ReLU(inplace=True),nn.Linear(128,10))第6章卷积神经网络6.6卷积神经网络的代码实现30下面给出用一个具有三个卷积层、一个池化层、一个全连接层的卷积神经网络给MNIST数据集分类的示例。defforward(self,x):x=self.layer1(x)x=self.layer2(x)x=self.layer3(x)x=self.layer4(x)x=x.view(x.size(0),-1)x=self.fc(x)returnx#实例化模型model=CNN()#如果有GPU,就把模型移到GPU上去iftorch.cuda.is_available():model=model.cuda()第6章卷积神经网络6.6卷积神经网络的代码实现31下面给出用一个具有三个卷积层、一个池化层、一个全连接层的卷积神经网络给MNIST数据集分类的示例。#定义损失函数和优化函数criterion=nn.CrossEntropyLoss()optimizer=optim.SGD(model.parameters(),lr=learning_rate)#训练模型epoch=0fordataintrain_loader:img,label=dataimg=Variable(img)iftorch.cuda.is_available():img=img.cuda()label=label.cuda()else:img=Variable(img)label=Variable(label)out=model(img)loss=criterion(out,label)print_loss=loss.data.item()第6章卷积神经网络6.6卷积神经网络的代码实现32下面给出用一个具有三个卷积层、一个池化层、一个全连接层的卷积神经网络给MNIST数据集分类的示例。optimizer.zero_grad()loss.backward()optimizer.step()epoch+=1ifepoch%50==0:print('epoch:{},loss:{:.4}'.format(epoch,loss.data.item()))#测试模型model.eval()eval_loss=0eval_acc=0fordataintest_loader:img,label=dataimg=Variable(img)iftorch.cuda.is_available():img=img.cuda()label=label.cuda()第6章卷积神经网络6.6卷积神经网络的代码实现33下面给出用一个具有三个卷积层、一个池化层、一个全连接层的卷积神经网络给MNIST数据集分类的示例。out=model(img)loss=criterion(out,label)eval_loss+=loss.data.item()*label.size(0)_,pred=torch.max(out,1)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))))第6章卷积神经网络6.7经典CNN-LeNet56.7.1LeNet-5结构34图6.14LeNet-5

结构第6章卷积神经网络6.7经典CNN-LeNet56.7.1LeNet-5结构35图6.14LeNet-5

结构3456

2345617第6章卷积神经网络6.7经典CNN-LeNet56.7.1LeNet-5结构36图6.14LeNet-5

结构第6章卷积神经网络6.7经典CNN-LeNet56.7.2CIFAR10数据库介绍CIFAR10这个数据集一共有50000张训练集,10000张测试集,两个数据集里面的图片都是png彩色图片,图片大小是32×32×3,一共是10分类问题,分别为飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车。37第6章卷积神经网络6.7经典CNN-LeNet56.7.3LeNet-5代码实现38第6章卷积神经网络6.8经典CNN-VGGNet6.8.1VGGNet介绍39第6章卷积神经网络6.8经典CNN-VGGNet6.8.1VGGNet介绍CNN结构演化40第6章卷积神经网络6.8经典CNN-VGGNet6.8.1VGGNet介绍41第6章卷积神经网络6.8经典CNN-VGGNet6.8.1VGGNet介绍都用3×3?

5×57×7比较。42第6章卷积神经网络6.8经典CNN-VGGNet6.8.1VGGNet介绍43假设图片尺寸为28x28,首先,使用5x5卷积核对其进行卷积,且stride=1,得到特征图尺寸为:(28-5)/1+1=24。然后,使用2个3x3卷积核(这里的两个是指2层),stride=1,有:第一层3x3:得到的结果是(28-3)/1+1=26第二层3x3:得到的结果是(26-3)/1+1=24所以,2个3x3卷积后的最终结果和1个5x5的卷积核是一样的。②说明一下减少网络参数的作用。对于2个3x3卷积核,所用的参数总量为2x(3x3)xchannels,对于1个5x5卷积核为5x5xchannels,因此可以显著地减少参数的数量,可以减少约30%的参数数量。第6章卷积神经网络6.8经典CNN-VGGNet6.8.1VGGNet介绍都用3×3多,快,好

减少参数445×5=2个3×37×7=3个3×3第6章卷积神经网络6.8经典CNN-VGGNet6.8.1VGGNet介绍VGG1645第6章卷积神经网络6.8经典CNN-VGGNet6.8.1VGGNet介绍VGG1946第6章卷积神经网络6.8经典CNN-VGGNet6.8.2VGGNet代码实现47VGG8第6章卷积神经网络6.9经典CNN-ResNet6.9.1ResNet介绍ResNet与普通残差网络不同之处在于,引入了跨层连接,来构造出了残差模块。使用普通的连接,上层的梯度必须要一层一层传回来,而是用残差连接,相当于中间有了一条更短的路,梯度能够从这条更短的路传回来,避免了梯度过小的情况。48第6章卷积神经网络6.9经典CNN-ResNet6.9.1ResNet介绍49退化≠过拟合第6章卷积神经网络6.9经典CNN-ResNet6.9.1ResNet介绍假定某段神经网络的输入是x,期望输出是H(x),如果直接把输入x传到输出作为初始结果,那么此时需要学习的目标就是F(x)=H(x)-x。如图6.18所示,这就是一个ResNet的残差学习单元,ResNet相当于将学习目标改变了,不再是学习一个完整的输出H(x),只是输出和输入的差别H(x)-x,即

温馨提示

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

评论

0/150

提交评论