卷积神经网络(高级篇) Inception Moudel

Inception Moudel

1、卷积核超参数选择困难,自动找到卷积的最佳组合。

2、1x1卷积核,不同通道的信息融合。使用1x1卷积核虽然参数量增加了,但是能够显著的降低计算量(operations)

3、Inception Moudel由4个分支组成,要分清哪些是在Init里定义,哪些是在forward里调用。4个分支在dim=1(channels)上进行concatenate。24+16+24+24 = 88

4、GoogleNet的Inception(Pytorch实现)

代码说明:1、先使用类对Inception Moudel进行封装

                  2、先是1个卷积层(conv,maxpooling,relu),然后inceptionA模块(输出的channels是24+16+24+24=88),接下来又是一个卷积层(conv,mp,relu),然后inceptionA模块,最后一个全连接层(fc)。

                 3、1408这个数据可以通过x = x.view(in_size, -1)后调用x.shape得到。

import torch
import torch.nn as nn
from torchvision import transforms
from torchvision import datasets
from torch.utils.data import DataLoader
import torch.nn.functional as F
import torch.optim as optim# prepare datasetbatch_size = 64
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]) # 归一化,均值和方差train_dataset = datasets.MNIST(root='../dataset/mnist/', train=True, download=True, transform=transform)
train_loader = DataLoader(train_dataset, shuffle=True, batch_size=batch_size)
test_dataset = datasets.MNIST(root='../dataset/mnist/', train=False, download=True, transform=transform)
test_loader = DataLoader(test_dataset, shuffle=False, batch_size=batch_size)# design model using class
class InceptionA(nn.Module):def __init__(self, in_channels):super(InceptionA, self).__init__()self.branch1x1 = nn.Conv2d(in_channels, 16, kernel_size=1)self.branch5x5_1 = nn.Conv2d(in_channels, 16, kernel_size=1)self.branch5x5_2 = nn.Conv2d(16, 24, kernel_size=5, padding=2)self.branch3x3_1 = nn.Conv2d(in_channels, 16, kernel_size=1)self.branch3x3_2 = nn.Conv2d(16, 24, kernel_size=3, padding=1)self.branch3x3_3 = nn.Conv2d(24, 24, kernel_size=3, padding=1)self.branch_pool = nn.Conv2d(in_channels, 24, kernel_size=1)def forward(self, x):branch1x1 = self.branch1x1(x)branch5x5 = self.branch5x5_1(x)branch5x5 = self.branch5x5_2(branch5x5)branch3x3 = self.branch3x3_1(x)branch3x3 = self.branch3x3_2(branch3x3)branch3x3 = self.branch3x3_3(branch3x3)branch_pool = F.avg_pool2d(x, kernel_size=3, stride=1, padding=1)branch_pool = self.branch_pool(branch_pool)outputs = [branch1x1, branch5x5, branch3x3, branch_pool]return torch.cat(outputs, dim=1) # b,c,w,h  c对应的是dim=1class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 = nn.Conv2d(1, 10, kernel_size=5)self.conv2 = nn.Conv2d(88, 20, kernel_size=5) # 88 = 24x3 + 16self.incep1 = InceptionA(in_channels=10) # 与conv1 中的10对应self.incep2 = InceptionA(in_channels=20) # 与conv2 中的20对应self.mp = nn.MaxPool2d(2)self.fc = nn.Linear(1408, 10) def forward(self, x):in_size = x.size(0)x = F.relu(self.mp(self.conv1(x)))x = self.incep1(x)x = F.relu(self.mp(self.conv2(x)))x = self.incep2(x)x = x.view(in_size, -1)x = self.fc(x)return xmodel = Net()# construct loss and optimizer
criterion = torch.nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)# training cycle forward, backward, updatedef train(epoch):running_loss = 0.0for batch_idx, data in enumerate(train_loader, 0):inputs, target = dataoptimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, target)loss.backward()optimizer.step()running_loss += loss.item()if batch_idx % 300 == 299:print('[%d, %5d] loss: %.3f' % (epoch+1, batch_idx+1, running_loss/300))running_loss = 0.0def test():correct = 0total = 0with torch.no_grad():for data in test_loader:images, labels = dataoutputs = model(images)_, predicted = torch.max(outputs.data, dim=1)total += labels.size(0)correct += (predicted == labels).sum().item()print('accuracy on test set: %d %% ' % (100*correct/total))if __name__ == '__main__':for epoch in range(10):train(epoch)test()

视频中截图:

说明:1、要解决的问题:梯度消失

           2、跳连接,H(x) = F(x) + x,张量维度必须一样,加完后再激活。不要做pooling,张量的维度会发生变化。

代码说明:

1、先是1个卷积层(conv,maxpooling,relu),然后ResidualBlock模块,接下来又是一个卷积层(conv,mp,relu),然后esidualBlock模块模块,最后一个全连接层(fc)。

import torch
import torch.nn as nn
from torchvision import transforms
from torchvision import datasets
from torch.utils.data import DataLoader
import torch.nn.functional as F
import torch.optim as optim# prepare datasetbatch_size = 64
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]) # 归一化,均值和方差train_dataset = datasets.MNIST(root='../dataset/mnist/', train=True, download=True, transform=transform)
train_loader = DataLoader(train_dataset, shuffle=True, batch_size=batch_size)
test_dataset = datasets.MNIST(root='../dataset/mnist/', train=False, download=True, transform=transform)
test_loader = DataLoader(test_dataset, shuffle=False, batch_size=batch_size)# design model using class
class ResidualBlock(nn.Module):def __init__(self, channels):super(ResidualBlock, self).__init__()self.channels = channelsself.conv1 = nn.Conv2d(channels, channels, kernel_size=3, padding=1)self.conv2 = nn.Conv2d(channels, channels, kernel_size=3, padding=1)def forward(self, x):y = F.relu(self.conv1(x))y = self.conv2(y)return F.relu(x + y)class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 = nn.Conv2d(1, 16, kernel_size=5)self.conv2 = nn.Conv2d(16, 32, kernel_size=5) # 88 = 24x3 + 16self.rblock1 = ResidualBlock(16)self.rblock2 = ResidualBlock(32)self.mp = nn.MaxPool2d(2)self.fc = nn.Linear(512, 10) # 暂时不知道1408咋能自动出来的def forward(self, x):in_size = x.size(0)x = self.mp(F.relu(self.conv1(x)))x = self.rblock1(x)x = self.mp(F.relu(self.conv2(x)))x = self.rblock2(x)x = x.view(in_size, -1)x = self.fc(x)return xmodel = Net()# construct loss and optimizer
criterion = torch.nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)# training cycle forward, backward, updatedef train(epoch):running_loss = 0.0for batch_idx, data in enumerate(train_loader, 0):inputs, target = dataoptimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, target)loss.backward()optimizer.step()running_loss += loss.item()if batch_idx % 300 == 299:print('[%d, %5d] loss: %.3f' % (epoch+1, batch_idx+1, running_loss/300))running_loss = 0.0def test():correct = 0total = 0with torch.no_grad():for data in test_loader:images, labels = dataoutputs = model(images)_, predicted = torch.max(outputs.data, dim=1)total += labels.size(0)correct += (predicted == labels).sum().item()print('accuracy on test set: %d %% ' % (100*correct/total))if __name__ == '__main__':for epoch in range(10):train(epoch)test()

1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机谈音乐薛之谦,明星浮世绘之薛之谦:分析了50多首音乐作品,为其总结了五个特点...

原标题:明星浮世绘之薛之谦:分析了50多首音乐作品,为其总结了五个特点薛之谦,才华横溢思维敏捷,性格搞怪却又忧郁。我曾经用四个字来形容他,沙雕其外,金玉其中。记得老薛曾经发布了一个动态&…

linux内核下载 编译

linux内核下载网址 今天去看了一场电影“疯狂的原始人”----回来的车上看到一个老奶奶传教士,我想对自己多,加油,加油学习,深思深思 我们现在用的安霸系统,每搞一次我都会进行一次备份,一个系统加上GUI一起都有差不多一G多,而今天下载了最新的linux内核版本,才不80M左…

Deep learning

论文:doi:10.1038/nature14539 论文意义和主要内容 三巨头从机器学习谈起,指出传统机器学习的不足,总览深度学习理论、模型,给出了深度学习的发展历史,以及DL中最重要的算法和理论。 概念: 原理&#xff…

第一周:深度学习引言(Introduction to Deep Learning)

1.1 欢迎(Welcome) 深度学习改变了传统互联网业务,例如如网络搜索和广告。但是深度学习同时也使得许多新产品和企业以很多方式帮助人们,从获得更好的健康关注。 深度学习做的非常好的一个方面就是读取X光图像,到生活中的个性化教育&#xf…

无忧计算机二级试题题库,全国计算机二级MS Office试题

考无忧小编为各位考生搜集整理了的二级MS Office试题,希望可以为各位的备考锦上添花,雪中送炭!记得刷计算机等级考试题库哟!1、被选中要筛选的数据单元格的下拉箭头中有哪几种筛选方式( ABD)A、全部B、前十个C、后十个D、自定义2、…

第二周:神经网络的编程基础之Python与向量化

本节课我们将来探讨Python和向量化的相关知识。 1. Vectorization 深度学习算法中,数据量很大,在程序中应该尽量减少使用循环语句,而可以使用向量运算来提高程序运行速度。 向量化(Vectorization)就是利用矩阵运算的…

U-boot移槙

1、我是照着这里去移植的 http://blog.chinaunix.net/uid-26306203-id-3716785.html 2、然后make 出现问题,到这里去有解决办法:http://blog.csdn.net/zjt289198457/article/details/6854177 : http://blog.csdn.net/zjt289198457/article/details/68…

第三周:浅层神经网络

1. 神经网络综述 首先,我们从整体结构上来大致看一下神经网络模型。 前面的课程中,我们已经使用计算图的方式介绍了逻辑回归梯度下降算法的正向传播和反向传播两个过程。如下图所示。神经网络的结构与逻辑回归类似,只是神经网络的层数比逻辑…

智慧交通day00-项目简介

汽车的日益普及在给人们带来极大便利的同时,也导致了拥堵的交通路况,以及更为频发的交通事故。智能交通技术已成为推动现代技术交通技术发展的重要力量,智能交通不仅能够提供实时的交通路况信息,帮助交通管理者规划管理策略&#…

智慧交通day01-算法库01:numba

1 numba介绍 numba是一个用于编译Python数组和数值计算函数的编译器,这个编译器能够大幅提高直接使用Python编写的函数的运算速度。 numba使用LLVM编译器架构将纯Python代码生成优化过的机器码,通过一些添加简单的注解,将面向数组和使用大量…

计算机语言恢复,win10系统找回消失不见语言栏的恢复方法

win10系统使用久了,好多网友反馈说关于对win10系统找回消失不见语言栏设置的方法,在使用win10系统的过程中经常不知道如何去对win10系统找回消失不见语言栏进行设置,有什么好的办法去设置win10系统找回消失不见语言栏呢?在这里小编…

智慧交通day01-算法库02:imutils

1.imutils功能简介 imutils是在OPenCV基础上的一个封装,达到更为简结的调用OPenCV接口的目的,它可以轻松的实现图像的平移,旋转,缩放,骨架化等一系列的操作。 安装方法: pip install imutils在安装前应确…

智慧交通day01-算法库03:cv.dnn

1.DNN模块 1.1. 模块简介 OpenCV中的深度学习模块(DNN)只提供了推理功能,不涉及模型的训练,支持多种深度学习框架,比如TensorFlow,Caffe,Torch和Darknet。 OpenCV那为什么要实现深度学习模块?…

高标清硬盘播出服务器,高标清4通道SDI硬盘播出服务器 XUAPX4000HD

原标题:高标清4通道SDI硬盘播出服务器 XUAPX4000HDXUAP多通道硬盘自动播出系全系统设计 IP/TS/SDI多种播出模式XUAP系统采用先进硬件译码技术的自动播出系统,可依设定时间自动化切换影片与触发连动外围设备,如 矩阵、录像机、切换器 等&#…

智慧交通day02-车流量检测实现01:总览

随着城市交通量的迅猛增加,车流量统计已成为智能交通系统中一项关键技术和热门研究方向。高效而精确的车流量检测可以交通管理者和决策者,以及驾驶员提供数据支撑,从而为交通调度,降低拥堵情况的发生,提高道路利用率有…

从qq服务器删除误收邮件,如何恢复从qq邮箱删除的电子邮件

Qq邮箱恢复意外删除的邮件方法第1步: 如果您删除邮件,则无论是普通删除还是完整删除,都可以选择在几秒钟内撤消,以便恢复以前意外删除的邮件. 也就是说,在删除消息后,请在删除上述提示后单击“撤消”. 如果提示消息消失…

智慧交通day02-车流量检测实现02:多目标追踪

1.多目标跟踪分类 多目标跟踪,即MOT(Multi-Object Tracking),也就是在一段视频中同时跟踪多个目标。MOT主要应用在安防监控和自动驾驶等领域中。 1.1 初始化方法 多目标跟踪,即MOT(Multi-Object Trackin…

GIT非常好的整理

初始化配置 C代码 #配置使用git仓库的人员姓名 git config --global user.name "Your Name Comes Here" #配置使用git仓库的人员email git config --global user.email youyourdomain.example.com #配置到缓存 默认15分钟 git config --global cred…

centos虚拟机wifi设置代理服务器,vmware虚拟机centos在宿主机连WIF..._网络编辑_帮考网...

caotongjiang新兵答主12-13TA获得超过6747个赞资料:netmask ip地址 broadcast 子网掩码 gateway 网关 dns DNS服务器vmware三种网络连接上网设置:1.桥接方式(bridge) :默认使用vmnet0将虚拟机的ip设置与主机同网段未使用ip,其余与主机相同:ip地址与主机同段相异,子网…

ValueError: check_hostname requires server_hostname的解决办法

在用pip安装scikit-image库时报错:ValueError: check_hostname requires server_hostname 报错ValueError: check_hostname requires server_hostname通常是因为版本冲突等原因,查遍网上众多大佬总结的经验后,最终发现是由网络代理导致的问题…