机器学习原理与应用课件 第12章 深度学习(自动编码解码器、卷积神经网络)_第1页
机器学习原理与应用课件 第12章 深度学习(自动编码解码器、卷积神经网络)_第2页
机器学习原理与应用课件 第12章 深度学习(自动编码解码器、卷积神经网络)_第3页
机器学习原理与应用课件 第12章 深度学习(自动编码解码器、卷积神经网络)_第4页
机器学习原理与应用课件 第12章 深度学习(自动编码解码器、卷积神经网络)_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

第12章

深度学习1自动编码解码器、卷积神经网络学习目标自动编码/解码器原理。利用PyTorch框架实现自动编码/解码器。卷积神经网络的基本原理。利用PyTorch框架实现卷积神经网络。12234自动编码器是一种尽可能复现输入数据的无监督式神经网络模型,可以从数据中提取最为关键的隐含特征(称为编码),同时可用所提取的特征以最小差别地重构出输入数据(称为解码)。从直观上来看,自动编码器可用于特征降维,类似主成分分析PCA,但其性能更强,这是由于神经网络模型可以提取更有效的新特征。312.2.3自动编码解码器

412.2.3自动编码解码器编码器与解码器的结构仍是普通的神经网络,两者通过异向的数据处理方式实现输入样本非线性变换,而通过最小化其自身与相关变换结果之间的误差及不断调整编码器与解码器的权重两个过程,则可提高输入样本非线性变换的可靠性。此外,输入样本的编码与解码过程可通过级联的方式实现不同层次的非线性变换(如第1次编码结果可作为第2次编码的输入),进而实现输入样本不同层次的特征表达。在理论上,前级编码输出的特征表达细节程度相对较高,而后级编码输出的特征表达则更加抽象。512.2.3自动编码解码器构建自动编码器(编码器与解码器结构自定)并对MNIST数据集图像进行特征提取。1.导入库importtorchimporttorch.nnasnnfromtorch.autogradimportVariablefromtorch.utils.dataimportDataLoaderfromtorchvisionimportdatasets,transformsimportmatplotlib.pyplotasplt612.2.3自动编码解码器2.构造数据自编码器的训练为无监督方式,因而仅采用训练集图像而无需类别标记。train_dataset=datasets.MNIST(root='./data/',train=True,transform=transforms.ToTensor(),download=False)test_dataset=datasets.MNIST(root='./data',train=False,transform=transforms.ToTensor())train_loader=DataLoader(dataset=train_dataset,batch_size=batch_size,shuffle=True)test_loader=DataLoader(dataset=test_dataset,batch_size=batch_size,shuffle=False)712.2.3自动编码解码器3.定义自动编码器自动编码器包括编码与解码两部分,相关类定义如下:classAutoEncoder(nn.Module):def__init__(self):super(AutoEncoder,self).__init__()#编码

self.encoder=nn.Sequential(nn.Linear(28*28,128),nn.Tanh(),nn.Linear(128,64),nn.Tanh(),nn.Linear(64,12),nn.Tanh(),nn.Linear(12,3),

)812.2.3自动编码解码器回顾:(1)激活函数。(2)网络定义。思考:输入与输出关系?#解码(层次、每层维度与激活函数类型可调整;注意与编码过程的对应)

self.decoder=nn.Sequential(

nn.Linear(3,12),nn.Tanh(),nn.Linear(12,64),nn.Tanh(),nn.Linear(64,128),nn.Tanh(),nn.Linear(128,28*28),

nn.Sigmoid(),)912.2.3自动编码解码器思考:为什么加Sigmoid()函数?defforward(self,x):

encoded=self.encoder(x)#数据编码decoded=self.decoder(encoded)#数据解码returnencoded,decoded

#返回结果#实例化自编码器对象autoencoder=AutoEncoder()1012.2.3自动编码解码器4.训练自编码器#定义损失函数Loss=nn.MSELoss()#设置优化器Opt=torch.optim.Adam(autoencoder.parameters(),lr=0.005)#开始训练T=50#训练轮数1112.2.3自动编码解码器

forepochinrange(T):loss_=0.0#累积训练误差

fori,(x,y)inenumerate(train_loader,1):b_x=Variable(x.view(-1,28*28))#将图像拉抻为28×28维向量b_y=Variable(x.view(-1,28*28))#与b_x相同encoded,decoded=autoencoder(b_x)#编码与解码L=Loss(decoded,b_y)#计算误差loss_+=

L.item()#误差累积Opt.zero_grad()#梯度清零L.backward()#误差反传Opt.step()#更新参数#显示误差变化if(epoch==0)|((epoch+1)%10==0):print('Epoch:[{}/{}],Loss:{:.4f}'.format(epoch+1,T,Loss_Sum/i))

1212.2.3自动编码解码器

5.测试自编码器x=test_dataset.data[1:2]#读取图像im=x.numpy().reshape(28,28)#将28×28维向量还原为图像尺寸#显示真实图像plt.figure(1)plt.imshow(im,cmap='gray')#利用自动编码器提取特征#编码x_=Variable(x.view(-1,28*28).type(torch.FloatTensor)/255.)encoded_data,_=autoencoder(x_)#解码decoded_data=autoencoder.decoder(encoded_data)1312.2.3自动编码解码器1412.2.3自动编码解码器#结果显示plt.figure(2)decoded_im=decoded_data.detach().numpy().reshape(28,28)#将28×28维向量还原为图像尺寸plt.imshow(decoded_im,cmap='gray')自编码器.左:真实图像;右:编码与解码后的结果(50次)解码后的图像表达了原图像主要特征。1512.2.3自动编码解码器在编码阶段,原28×28维向量被映射为3维向量,此3维向量却包含了原图像的关键信息。在此情况下,任意3维向量则可反向映射为相应的图像。如:#随机给定一个张量进行测试code=torch.FloatTensor([[0.1,-0.9,0.3]])decode=autoencoder.decoder(code)decode=decode.view(decode.size()[0],28,28)decoded_im=decode.detach().numpy().reshape(28,28)plt.imshow(decoded_im,cmap='gray')16自动编码解码器的目的是重构输入数据,使其隐藏层学习到该输入数据的良好表征。自动编码器主要用于降维或特征学习。17思考:人类观察与区分事物的特点?1.全局与局部观察(近看与远看)。2.能快速把握事物的主要特征。

12.2.4卷积神经网络18卷积神经网络(ConvolutionalNeuralNetwork)是一种用于提取图像不同层次特征且具有局部连接、权重共享等特性的神经网络,其基本机制源于生物学上的感受野,即:只有视网膜上的特定区域(感受野)才能激活视觉神经元。卷积神经网络主要使用在图像与视频分析与理解任务(图像分类、人脸识别、物体检测、图像分割等),其准确率远远高于浅层神经网络。典型的卷积神经网络由输入层、卷积层、激活层、池化层、全连接层与输出层组成(卷积层、激活层与池化层通常组合成具有不同参数的卷积组以提取图像不同层次的特征)。

12.2.4卷积神经网络(1)输入层卷积神经网络可对灰度与RGB两类图像进行处理。对于灰度图像,其像素取值范围为[0,255](如0表示纯黑、255表示纯白、其间数字表示灰色等),相应的输入可视为一个M×N×1矩阵(M与N分别表示图像行数与列数);而对于RGB图像,由于其像素颜色由红、绿、蓝三原色组合而成,相应的输入可视为一个M×N×3矩阵(数字3表示三个与三原色对应且具相同行列的矩阵)。19

12.2.4卷积神经网络20(2)卷积层卷积层主要用来提取不同层次的特征。如图所示,输入图像尺寸为32×32×3(3为R、G、B三个通道),卷积核尺寸为5×5×3×2(5×5为由长度与宽度决定的感受野尺寸、3为与输入图像通道或颜色分量层次、2为卷积核数量),输入图像通过卷积运算后将得到2个28×28×1的特征图。卷积:对图像的不同局部矩阵和卷积核矩阵各个位置的元素相乘与相加运算。21

12.2.4卷积神经网络如上图所示,图像与卷积核分别为3×4与2×2的矩阵,以图像左上角为基准点将卷积核叠放于图像之上后,可通过对点相乘与求和的方式生成特征图像左上角位置的像素值am+bn+ex+fy,而若卷积核逐像素(每次移动1个像素)向右平移并进行类似卷积运算,则可依次生成特征图像第一行第2、3位置的像素值bm+cn+fx+gy与cm+dn+gx+hy,同理可知,将卷积核向下平移可生成特征图像第二行所有位置的像素值。22

12.2.4卷积神经网络根据卷积运算的原理可知,由卷积运算生成的特征图像尺寸通常小于原图像尺寸,在实际中并不利于后续更高层次特征提取。为解决此问题,一般将参与卷积运算的图像周围进行扩充并填充为指定的像素值(如零)。对于尺寸为Nw×Nh×Nd的图像(Nd=1为灰度图像,Nd=3为RGB图像),不妨设其需扩充的像素数(即宽度)为P,则扩充后的图像尺寸为(Nw+2P)×(Nh+2P)×Nd,若利用尺寸为nw×nh×Nd卷积核(卷积核的通道与图像通道应相同)对扩充后的图像进行卷积运算,则生成的特征图像尺寸为(Nw-nw+2P+1)×(Nh-nh+2P+1)(特征图像的数量由卷积核的数量决定);因而,若使特征图像尺寸与原图像尺寸相同,只需令N-n+2P+1=N,进而可知P可设置为(n-1)/2(n表示卷积核的行数或列数)。

23

12.2.4卷积神经网络④不同层次的卷积层可提取图像不同层次的特征,底层卷积层偏向于提取图像局部特征(如物体的边缘),而高层卷积层偏向于提取具有语义信息的全局特征(如物体的结构)。⑤卷积神经网络的训练中,图像与卷积核尺寸、图像扩充宽度、卷积平移步长、卷积核数量等参数可依据经验手工设置,而与神经元相关的权重则需通过适当的训练或优化算法进行确定。24

12.2.4卷积神经网络(3)激活层激活函数可以提高卷积神经网络非线性建模的能力。在具体构建卷积神经网络时,通常在卷积层后串接由特定激活函数构造的激活层以对特征图像进行非线性运算,进而实现更为有效的特征表达。25

12.2.4卷积神经网络(4)池化层

“池化”,即“下采样”,其目的在于:对特征图进行压缩处理以降低计算复杂度或减小模型的规模。突出主要特征或提高特征的鲁棒性。在一定程度上控制过拟合。26

12.2.4卷积神经网络池化操作包括平均池化与最大池化两种。如图所示,最大池化(MaxPooling)操作在特征图中求取2×2区域内值的最大者作为原2×2区域内值的表达,最终可得到右图所示的结果(步长为2)。当然,窗口大小是人工设置的,除此之外,池化层没有任何参数需要设置或训练。27

12.2.4卷积神经网络

12.2.4卷积神经网络(5)全连接层全连接层将最后的特征输出映射到线性可分的空间以完成分类或回归任务。即将获得的卷积(包括激活与池化等处理)结果转换为向量输入至分类器(如Softmax分类器)进行分类。需要注意的是,在原图像未经卷积、激活与池化等处理而直接采用全连接方式构建神经网络将出现参数过多或模型复杂度过高、无法提取局部不变性特征等问题。28实例介绍卷积神经网络应用方法。(1)问题描述利用自定义卷积神经网络对MNIST数据集手写数字图像(尺寸为28×28)进行分类。1.导入库importtorchfromtorchimportnn,optimfromtorch.autogradimportVariablefromtorch.utils.dataimportDataLoaderfromtorchvisionimportdatasets,transformsimporttorch.nn.functionalasFimportmatplotlib.pyplotasplt29

12.2.4卷积神经网络30

12.2.4卷积神经网络2.生成数据#每次处理的图像数量batch_size=64#预处理操作data_transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize([0.5],[0.5])])#加载数据train_dataset=datasets.MNIST(root='./data',train=True,transform=data_transform,download=True)test_dataset=datasets.MNIST(root='./data',train=False,transform=data_transform)train_loader=DataLoader(train_dataset,batch_size=batch_size,shuffle=True)test_loader=DataLoader(test_dataset,batch_size=batch_size,shuffle=False)31

12.2.4

卷积神经网络3.定义卷积神经网络classCNN(nn.Module):def__init__(self):super(CNN,self).__init__()self.conv1=nn.Conv2d(1,20,5,1)#28-5+1=24self.conv2=nn.Conv2d(20,50,5,1)self.fc1=nn.Linear(4*4*50,500)self.fc2=nn.Linear(500,10)32

12.2.4卷积神经网络参数说明:nn.Conv2d(self,in_channels,out_channels,kernel_size,stride=1,padding=0,dilation=1,groups=1,bias=True))(1)in_channel:输入数据的通道数; (2)out_channel:输出数据的通道数;  (3)kennel_size:卷积核大小,可以是int,或tuple。例:kennel_size=2,意味着卷积大小(2,2),kennel_size=(2,3)意味着卷积大小(2,3)即非正方形卷积。(4)stride:步长,默认为1。例:stride=2,意味着步长上下左右扫描皆为2,

stride=(2,3)左右扫描步长为2,上下为3;  (5)padding:零填充。defforward(self,x):#x:1*28*28x=F.relu(self.conv1(x))#24*24*20x=F.max_pool2d(x,2,2)#12*12*20x=F.relu(self.conv2(x))#8*8*50x=F.max_pool2d(x,2,2)#4*4*50

x=x.view(-1,4*4*50)#展平为4*4*50x=F.relu(self.fc1(x))#映射为500x=self.fc2(x)#映射为10returnx#实例化模型net=CNN()33

12.2.4卷积神经网络参数说明:nn.MaxPool2d(kernel_size,stride=None,padding=0,dilation=1,return_indices=False,ceil_mode=False)(1)kernel_size(intortuple)-maxpooling的窗口大小stride(intortuple,optional)-maxpooling的窗口移动的步长。默认值是kernel_size。(2)padding(intortuple,optional)-输入的每一条边补充0的层数。(3)dilation(intortuple,optional)–一个控制窗口中元素步幅的参数。(4)return_indices-如果等于True,会返回输出最大值的序号,对于上采样操作会有帮助。(5)ceil_mode-如果等于True,计算输出信号大小的时候,会使用向上取整,代替默认的向下取整的操作。34

12.2.4卷积神经网络35

12.2.4卷积神经网络4.训练卷积神经网络#定义损失函数Loss=nn.CrossEntropyLoss()#设置优化器Opt=optim.SGD(net.parameters(),lr=0.02)#训练模型T=1036

12.2.4卷积神经网络forepochinrange(T):loss_=0.0

#累积训练误差acc_=0.0

#累积训练精度fori,datainenumerate(train_loader,1):im,label=data

label_pred=net(im) #前向传播L=Loss(label_pred,label)

#计算误差loss_+=L.data.numpy() #误差累积_,label_opt=torch.max(label_pred,1)#求取预测概率对应的类别acc_+=(label_opt==label).float().mean()#累积精度Opt.zero_grad()

#梯

温馨提示

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

最新文档

评论

0/150

提交评论