当前位置: 首页 > news >正文

GoogleNet

GoogleNet

一.手写GoogleNet架构

 

image

image

import torch
from d2l import torch as d2l
from torch import nn
from torch.nn import functional as F
#1.Inception块
class Inception(nn.Module):#一个Inception块包含四条路径#in_chanels输入通道数,c1~c4表示每条路径上的输出通道数量,如果该路径上有多个卷积层,那输出通道应该是列表def __init__(self,in_chanels,c1,c2,c3,c4,**kwargs):super(Inception,self).__init__(**kwargs)#路径1:1*1卷积层self.p1_1=nn.Conv2d(in_chanels,c1,1)#路径2:1*1卷积->3*3卷积,padding=1self.p2_1=nn.Conv2d(in_chanels,c2[0],1)self.p2_2=nn.Conv2d(c2[0],c2[1],3,padding=1)#路径3:1*1卷积->5*5卷积,padding=2self.p3_1=nn.Conv2d(in_chanels,c3[0],1)self.p3_2=nn.Conv2d(c3[0],c3[1],5,padding=2)#路径4:3*3最大池化层padding=1,stride=1->1*1卷积self.p4_1=nn.MaxPool2d(3,padding=1,stride=1)self.p4_2=nn.Conv2d(in_chanels,c4,kernel_size=1)def forward(self,x):p1=F.relu(self.p1_1(x))p2=F.relu(self.p2_2(F.relu(self.p2_1(x))))p3=F.relu(self.p3_2(F.relu(self.p3_1(x))))p4=F.relu(self.p4_2(self.p4_1(x)))return torch.cat((p1,p2,p3,p4),dim=1)
#每一个stage
#第一个stage
b1=nn.Sequential(nn.Conv2d(1,64,7,2,3),nn.ReLU(),nn.MaxPool2d(3,2,1)
)
#第2个stage
b2=nn.Sequential(nn.Conv2d(64,64,1),nn.ReLU(),nn.Conv2d(64,192,3,padding=1),nn.ReLU(),nn.MaxPool2d(3,2,1)
)
#Inception块数自己定
#第3个stage:2个Inception块和最大池化层
b3 = nn.Sequential(Inception(192, 64, (96, 128), (16, 32), 32),Inception(256, 128, (128, 192), (32, 96), 64),nn.MaxPool2d(kernel_size=3, stride=2, padding=1))
#stage4:5个Inception块,一个最大池化层
b4 = nn.Sequential(Inception(480, 192, (96, 208), (16, 48), 64),Inception(512, 160, (112, 224), (24, 64), 64),Inception(512, 128, (128, 256), (24, 64), 64),Inception(512, 112, (144, 288), (32, 64), 64),Inception(528, 256, (160, 320), (32, 128), 128),nn.MaxPool2d(kernel_size=3, stride=2, padding=1))
#stage5:2个Inception块,全局平均池化层AdaptiveAvgPool2d
b5 = nn.Sequential(Inception(832, 256, (160, 320), (32, 128), 128),Inception(832, 384, (192, 384), (48, 128), 128),nn.AdaptiveAvgPool2d((1,1)),nn.Flatten())
#最终输出通道数为10因为想做数字0~9的分类
net = nn.Sequential(b1, b2, b3, b4, b5, nn.Linear(1024, 10))
X=torch.rand((1,1,96,96))
for layer in net:X=layer(X)print(layer.__class__.__name__,X.shape)

image

二.训练GoogleNet

import torch
from d2l import torch as d2l
from torch import nn
from torch.nn import functional as F
#1.Inception块
class Inception(nn.Module):#一个Inception块包含四条路径#in_chanels输入通道数,c1~c4表示每条路径上的输出通道数量,如果该路径上有多个卷积层,那输出通道应该是列表def __init__(self,in_chanels,c1,c2,c3,c4,**kwargs):super(Inception,self).__init__(**kwargs)#路径1:1*1卷积层self.p1_1=nn.Conv2d(in_chanels,c1,1)#路径2:1*1卷积->3*3卷积,padding=1self.p2_1=nn.Conv2d(in_chanels,c2[0],1)self.p2_2=nn.Conv2d(c2[0],c2[1],3,padding=1)#路径3:1*1卷积->5*5卷积,padding=2self.p3_1=nn.Conv2d(in_chanels,c3[0],1)self.p3_2=nn.Conv2d(c3[0],c3[1],5,padding=2)#路径4:3*3最大池化层padding=1,stride=1->1*1卷积self.p4_1=nn.MaxPool2d(3,padding=1,stride=1)self.p4_2=nn.Conv2d(in_chanels,c4,kernel_size=1)def forward(self,x):p1=F.relu(self.p1_1(x))p2=F.relu(self.p2_2(F.relu(self.p2_1(x))))p3=F.relu(self.p3_2(F.relu(self.p3_1(x))))p4=F.relu(self.p4_2(self.p4_1(x)))return torch.cat((p1,p2,p3,p4),dim=1)
#每一个stage
#第一个stage
b1=nn.Sequential(nn.Conv2d(1,64,7,2,3),nn.ReLU(),nn.MaxPool2d(3,2,1)
)
#第2个stage
b2=nn.Sequential(nn.Conv2d(64,64,1),nn.ReLU(),nn.Conv2d(64,192,3,padding=1),nn.ReLU(),nn.MaxPool2d(3,2,1)
)
#Inception块数自己定
#第3个stage:2个Inception块和最大池化层
b3 = nn.Sequential(Inception(192, 64, (96, 128), (16, 32), 32),Inception(256, 128, (128, 192), (32, 96), 64),nn.MaxPool2d(kernel_size=3, stride=2, padding=1))
#stage4:5个Inception块,一个最大池化层
b4 = nn.Sequential(Inception(480, 192, (96, 208), (16, 48), 64),Inception(512, 160, (112, 224), (24, 64), 64),Inception(512, 128, (128, 256), (24, 64), 64),Inception(512, 112, (144, 288), (32, 64), 64),Inception(528, 256, (160, 320), (32, 128), 128),nn.MaxPool2d(kernel_size=3, stride=2, padding=1))
#stage5:2个Inception块,全局平均池化层AdaptiveAvgPool2d
b5 = nn.Sequential(Inception(832, 256, (160, 320), (32, 128), 128),Inception(832, 384, (192, 384), (48, 128), 128),nn.AdaptiveAvgPool2d((1,1)),nn.Flatten())
#最终输出通道数为10因为想做数字0~9的分类
net = nn.Sequential(b1, b2, b3, b4, b5, nn.Linear(1024, 10))
train_iter,test_iter=d2l.load_data_fashion_mnist(batch_size=128,resize=96)
lr=0.1
nums_echos=10
d2l.train_ch6(net,train_iter,test_iter,nums_echos,lr,d2l.try_gpu())

 

http://www.hskmm.com/?act=detail&tid=32828

相关文章:

  • 2025磨床主轴定制/磨床主轴非标定制/国产/进口/内圆/外圆/无心/平面/来图定制磨床电主轴厂家推荐榜:技术与口碑双优之选
  • 【树莓派】安装PostgreSQL
  • 2025年轮胎厂家权威推荐榜:舒适轮胎,耐磨轮胎,高性能轮胎与静音轮胎全系列选购指南
  • 史诗级警报:ASP.NET Core 被曝 CVSS 9.9 分漏洞,几乎所有.NET 版本无一幸免!
  • C#委托和事件深入
  • 海康摄像头4G/5G或有线网都可以配置ISUP接入到LiveNVR实现互联网网页直播和回放。同时支持配置接收摄像头的报警信息,并抓图和紧急录像取证
  • RTP推流测试
  • 2025 年板材厂家最新推荐排行榜:涵盖环保、密度、净化、零醛添加等类型,胖胖熊等优质品牌详细解析
  • 压缩 PDF 文件大小(3 大实用的 Python 库) - E
  • 2025 年搅拌器厂家最新推荐榜:聚焦国内优质厂商,精选实力品牌助力企业采购决策侧入式/立式/脱硫/桨式/水处理搅拌器厂家推荐
  • 2025年轴承厂家权威推荐榜单:电机轴承,单向轴承,含油轴承,自润滑轴承源头厂家综合实力与创新技术全景解析
  • 请输入标题
  • 2025 年修补剂厂家最新推荐排行榜:金属 / 陶瓷 / 橡胶等多材质适配品牌深度解析,助力企业精准选型
  • 2025 工业电子胶粘剂厂家最新推荐榜单发布:国产实力品牌深度解析,选购指南全攻略高端工业/进口国产工业/工业电子胶粘剂胶水厂家推荐
  • 国产项目管理工具Gitee的崛起:数字化转型浪潮下的本土化突围
  • Elasticsearch安装和Kibana安装
  • 2025 试验机厂家最新推荐权威榜单:弹簧 / 环境 / 材料检测设备领军企业深度解析
  • [note] slope trick
  • three自带的框选工具SelectionBox、SelectionHelper
  • 2025年精密磨床/CNC机械加工厂家推荐榜单:涵盖铣床/车床/磨削/多轴/复合加工,铝/不锈钢/钛合金/模具钢/塑料件定制,汽车/医疗/航空航天/机器人零件及模具工装夹具加工
  • 2025 电动缸源头厂家最新推荐榜:剖析国产厂商成本优势与技术实力,附权威选购指南
  • 网络编程实践笔记_4_阿贝云_免费云服务器_简易博客_
  • 10 17
  • 2025年铝单板厂家推荐排行榜,氟碳铝单板,木纹铝单板,冲孔铝单板,外墙铝单板,雕花铝单板,异形铝单板,双曲铝单板公司推荐!
  • 2025 年最新推荐热熔胶源头厂家榜:覆盖书刊装订 / 包装等场景,助企业选高性价比产品
  • 开发日志
  • Gitee 2025:中国开发者生态的崛起与本土化优势
  • C++中的new操作符:new operator、operator new、placement new
  • JavaBean知识总结及范例
  • 2025 年家装管道生产厂家最新推荐排行榜:覆盖云南昆明贵州贵阳四川成都重庆,精选优质 PPR/PVC 管道品牌,解决选购难题