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

深度学习基础--CNN经典网络之InceptionV3详解与复现(pytorch)

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊

前言

  • InceptionV3是InceptionV1的升级版,虽然加大了计算量,但是当时效果是比VGG效果要好的。
  • 本次任务是探究InceptionV3结构并进行复现实验;
  • 欢迎收藏 + 关注,本人将会持续更新

文章目录

  • 1、模型简介
    • 1、模型特点
    • 2、模型结构简介
  • 2、模型复现
      • 准备工作
      • 1、InceptionA
      • 2、InceptionB
      • 3、InceptionC
      • 4、ReductionA
      • 5、ReductionB
      • 6、辅助分支
      • 7、模型搭建
      • 8、查看模型详情
  • 3、参考资料

1、模型简介

1、模型特点

InceptionV3是谷歌在2015年提出,是InceptionV1的进阶版,对于Inception系列网络来说,他是当时第一个在100层卷积网络却依然可以取得好效果的网络(ResNet还没有提出来),相比于InceptionV1来说,他主要特点是:

  • 更深入得网络结构,在InceptionV3中,包含了48层卷积网络,这可以提取出更多特征,从而获得更好成果;
  • 使用分解卷积,将较大的卷积核分解为多个较小的卷积核,在保持良好性能的情况下,依然降低了网络参数量,减少计算复杂度;
  • 使用BN层,InceptionV3中每个卷积层后都添加了BN层,使数据符合高斯分布,这样有助于缓解网络梯度消失和梯度爆炸的效果,同时也有助网络于收敛和提高泛化能力;
  • 辅助分类器,在InceptionV3中提出来辅助分类器结构模块,主要用于缓解深层网络训练中梯度消失问题,加快模型收敛,辅助分类器结构:平均池化层 + 全连接层 + Softmax激活函数组成;
  • 基于RMSPeop优化器代替SGD方法,可以使用模型更快收敛。

📚 分解卷积

InceptionV3网络结构中,采用空间可分离卷积结构,这里简介该结构。


👁 在介绍该结构前,先学习一下深度卷积(DW)

  • 与常规卷积相比,深度卷积一个卷积核负责一个通道,一个通道只被一个卷积核卷,在常规卷积中是同时操作图片的每个通道。
  • 举例:对于一张3通道一条图片,在深度卷积首先经过第一次卷积运算,和常规卷积相比,深度卷积完全是在二维平面内进行。卷积核个数和通道数一一对应,如图所示:
  • 在这里插入图片描述
  • 而对于常规卷积中,以三通道数为例(参考某一个大神的图片):
    -在这里插入图片描述

从上图可以看出,他是在多维平面内进行卷积操作,且一个卷积核同时进行多个通道卷积,然后再生产特征。


👀 现在介绍深度可分离卷积,分为两步:深度卷积 + 逐点卷积

以输入 12 * 12 * 3图像,5 * 5 卷积核为例:

1️⃣ 第一步:深度卷积

在这里插入图片描述

通过上面学习可以发现,这里就是使用3个 5 * 5 * 1的卷积核分别提取3个特征,每个卷积核计算完都会得到一个 8 * 8 * 1 的输出特征,然后将3个堆积在一起,就得出了 8 * 8 * 3 大小的最终输出特征图。

发现:DW卷积缺少特征之间的融合,解决这个问题就是用到了下面介绍的逐点卷积;

2️⃣ 第二步:逐点卷积

逐点卷积就是用1 * 1的卷积核去遍历每一个点;在第一步中,我们得到了 8 * 8 * 3 尺寸的特征图,这里我们采用一个3通道的1 * 1卷积(1 * 1 * 3)对该特征图进行计算,去融合3个通道间的特征功能,如图:

在这里插入图片描述

最后就得到了 8 * 8 * 1的输出图,如果这个时候使用256个 1 * 1 * 3的卷积对该特征图进行卷积,得到结果如图:

在这里插入图片描述


2、模型结构简介

先回忆一下InceptionV1的核心网络结构:

在这里插入图片描述

将 5 * 5 的卷积结构分解成两个3 * 3的卷积运算以提高速度(通过计算发现两个3 * 3卷积结构的计算量远小于一个5 * 5的计算量):

在这里插入图片描述

作者将n * n 的卷积核分解为 1 * n 和 n * 1的两个卷积核,如:一个3 * 3的卷积核=先执行一个1 * 3的卷积核在执行一个3 * 1的卷积,作者发现这种方法比单使用3 * 3卷积降低 33% 成本,如图:

在这里插入图片描述

作者还在InceptionV1核心结构中进行了横向扩展,解决性能瓶颈问题(训练神经网络很多时候会遇到精度上不去的现象),这一模块主要进行宽度扩展,如图:

在这里插入图片描述

最后通过模块搭建,InceptionV1结构如下

在这里插入图片描述

2、模型复现

准备工作

import torch  
import torch.nn as nn 
import torch.nn.functional as F # 封装 Conv2d + BN + ReLU
class BasicConv2d(nn.Module):def __init__(self, in_channels, out_channels, **kwargs):super(BasicConv2d, self).__init__()self.conv = nn.Conv2d(in_channels, out_channels, bias=False, **kwargs)self.bn = nn.BatchNorm2d(out_channels, eps=0.001)def forward(self, x):x = self.conv(x)x = self.bn(x)return F.relu(x, inplace=True)

1、InceptionA

在这里插入图片描述

# 这一部分对于InceptionV1核心部分来说,没什么变化,不同的是 3 * 3变成了两个
class InceptionA(nn.Module):def __init__(self, in_channels, pool_features):super(InceptionA, self).__init__()# 1 * 1卷积, BasicConv2d是封装好的卷积Conv2d + BN + ReLUself.branch1x1 = BasicConv2d(in_channels, 64, kernel_size=1)# 1 * 1 + 5 * 5self.branch5x5_1 = BasicConv2d(in_channels, 48, kernel_size=1)self.branch5x5_2 = BasicConv2d(48, 64, kernel_size=5, padding=2)# 1 * 1 + 3 * 3 + 3 * 3self.branch3x3_1 = BasicConv2d(in_channels, 64, kernel_size=1)self.branch3x3_2 = BasicConv2d(64, 96, kernel_size=3, padding=1)self.branch3x3_3 = BasicConv2d(96, 96, kernel_size=3, padding=1)# 池化self.branch_pool = BasicConv2d(in_channels, pool_features, 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)out = [branch1x1, branch5x5, branch3x3, branch_pool]# 拼接, 通道拼接return torch.cat(out, dim=1)

2、InceptionB

在这里插入图片描述

# 这个模块将 3 * 3,,5 * 5变成(1 * n,n * 1)/ (n * 1 + 1 * n)结构
class InceptionB(nn.Module):def __init__(self, in_channels, channels_7x7):super(InceptionB, self).__init__()self.branch1x1 = BasicConv2d(in_channels, 192, kernel_size=1)c7 = channels_7x7# 1 * 1 + 7 * 1 + 1 * 7self.branch7x7_1 = BasicConv2d(in_channels, c7, kernel_size=1)self.branch7x7_2 = BasicConv2d(c7, c7, kernel_size=(1, 7), padding=(0, 3))self.branch7x7_3 = BasicConv2d(c7, 192, kernel_size=(7, 1), padding=(3, 0))# 1 * 1 + (7 * 1 + 1 * 7) * 2self.branch7x7dbl_1 = BasicConv2d(in_channels, c7, kernel_size=1)self.branch7x7dbl_2 = BasicConv2d(c7, c7, kernel_size=(7, 1), padding=(3, 0))self.branch7x7dbl_3 = BasicConv2d(c7, c7, kernel_size=(1, 7), padding=(0, 3))self.branch7x7dbl_4 = BasicConv2d(c7, c7, kernel_size=(7, 1), padding=(3, 0))self.branch7x7dbl_5 = BasicConv2d(c7, 192, kernel_size=(1, 7), padding=(0, 3))self.branch_pool = BasicConv2d(in_channels, 192, kernel_size=1)def forward(self, x):branch1x1 = self.branch1x1(x)branch7x7 = self.branch7x7_1(x)branch7x7 = self.branch7x7_2(branch7x7)branch7x7 = self.branch7x7_3(branch7x7)branch7x7dbl = self.branch7x7dbl_1(x)branch7x7dbl = self.branch7x7dbl_2(branch7x7dbl)branch7x7dbl = self.branch7x7dbl_3(branch7x7dbl)branch7x7dbl = self.branch7x7dbl_4(branch7x7dbl)branch7x7dbl = self.branch7x7dbl_5(branch7x7dbl)branch_pool = F.avg_pool2d(x, kernel_size=3, stride=1, padding=1)branch_pool = self.branch_pool(branch_pool)outputs = [branch1x1, branch7x7, branch7x7dbl, branch_pool]return torch.cat(outputs, 1)

3、InceptionC

在这里插入图片描述

# 这个部分采用横向扩展,主要用与处理性能瓶颈
class InceptionC(nn.Module):def __init__(self, in_channels):super(InceptionC, self).__init__()# 1 * 1self.branch1x1 = BasicConv2d(in_channels, 320, kernel_size=1)# 1 * 1 + 1 * 3 + 3 * 1self.branch3x3_1 = BasicConv2d(in_channels, 384, kernel_size=1)self.branch3x3_2a = BasicConv2d(384, 384, kernel_size=(1, 3), padding=(0, 1))self.branch3x3_2b = BasicConv2d(384, 384, kernel_size=(3, 1), padding=(1, 0))# 1 * 1 + 3 * 3 + 3 * 1 + 3 * 1self.branch3x3b1_1 = BasicConv2d(in_channels, 448, kernel_size=1)self.branch3x3b1_2 = BasicConv2d(448, 384, kernel_size=3, padding=1)self.branch3x3b1_3a = BasicConv2d(384, 384, kernel_size=(1, 3), padding=(0, 1))self.branch3x3b1_3b = BasicConv2d(384, 384, kernel_size=(3, 1), padding=(1, 0))self.branch_pool = BasicConv2d(in_channels, 192, kernel_size=1)def forward(self, x):branch1x1 = self.branch1x1(x)branch3x3 = self.branch3x3_1(x)branch3x3 = [self.branch3x3_2a(branch3x3),self.branch3x3_2b(branch3x3),]branch3x3 = torch.cat(branch3x3, dim=1) # 拼接branch3x3b1 = self.branch3x3b1_1(x)branch3x3b1 = self.branch3x3b1_2(branch3x3b1)branch3x3b1 = [self.branch3x3b1_3a(branch3x3b1),self.branch3x3b1_3b(branch3x3b1)]branch3x3b1 = torch.cat(branch3x3b1, dim=1)branch_pool = F.avg_pool2d(x, kernel_size=3, stride=1, padding=1)branch_pool = self.branch_pool(branch_pool)out = [branch1x1, branch3x3, branch3x3b1, branch_pool]return torch.cat(out, dim=1)

4、ReductionA

在这里插入图片描述

从总体模块可以看出,这个位置在于连接InceptionA/B/C模块后,主要用于特征提取后降维操作,总体模型结构如下:
在这里插入图片描述

class ReductionA(nn.Module):def __init__(self, in_channels):super(ReductionA, self).__init__()# 3 * 3self.branch3x3 = BasicConv2d(in_channels, 384, kernel_size=3, stride=2)# 1 * 1 + 3 * 3 + 3 * 3self.branch3x3db1_1 = BasicConv2d(in_channels, 64, kernel_size=1)self.branch3x3db1_2 = BasicConv2d(64, 96, kernel_size=3, padding=1)self.branch3x3db1_3 = BasicConv2d(96, 96, kernel_size=3, stride=2)def forward(self, x):branch3x3 = self.branch3x3(x)branch3x3db1 = self.branch3x3db1_1(x)branch3x3db1 = self.branch3x3db1_2(branch3x3db1)branch3x3db1 = self.branch3x3db1_3(branch3x3db1)# 这里采用最大池化branch_pool = F.max_pool2d(x, kernel_size=3, stride=2)out = [branch3x3, branch3x3db1, branch_pool]return torch.cat(out, dim=1)

5、ReductionB

在这里插入图片描述

class ReductionB(nn.Module):def __init__(self, in_channels):super(ReductionB, self).__init__()self.branch3x3_1 = BasicConv2d(in_channels, 192, kernel_size=1)self.branch3x3_2 = BasicConv2d(192, 320, kernel_size=3, stride=2)self.branch7x7x3_1 = BasicConv2d(in_channels, 192, kernel_size=1)self.branch7x7x3_2 = BasicConv2d(192, 192, kernel_size=(1, 7), padding=(0, 3))self.branch7x7x3_3 = BasicConv2d(192, 192, kernel_size=(7, 1), padding=(3, 0))self.branch7x7x3_4 = BasicConv2d(192, 192, kernel_size=3, stride=2)def forward(self, x):branch3x3 = self.branch3x3_1(x)branch3x3 = self.branch3x3_2(branch3x3)branch7x7x3 = self.branch7x7x3_1(x)branch7x7x3 = self.branch7x7x3_2(branch7x7x3)branch7x7x3 = self.branch7x7x3_3(branch7x7x3)branch7x7x3 = self.branch7x7x3_4(branch7x7x3)branch_pool = F.max_pool2d(x, kernel_size=3, stride=2)out = [branch3x3, branch7x7x3, branch_pool]return torch.cat(out, dim=1)

6、辅助分支

在这里插入图片描述

# 辅助分类器
class InceptionAux(nn.Module):def __init__(self, in_channels, num_classes):super(InceptionAux, self).__init__()self.conv0 = BasicConv2d(in_channels, 128, kernel_size=1)self.conv1 = BasicConv2d(128, 768, kernel_size=5)self.conv1.stddev = 0.01   # 设置卷积层权重的标准差self.fc = nn.Linear(768, num_classes)self.fc.saddev = 0.001  # 设置全连接层权重的标准差def forward(self, x):# 17 x 17 x 768x = F.avg_pool2d(x, kernel_size=5, stride=5)# 5 x 5 x 768x = self.conv0(x)# 5 x 5 x 128x = self.coinv1(x)# 1 x 1 x 768x = x.view(x.size(0), -1) # 展开# 768x = self.fc(x)return x

7、模型搭建

在这里插入图片描述

class InceptionV3(nn.Module):def __init__(self, num_classes=1000, aux_logits=False, transform_input=False):super(InceptionV3, self).__init__()'''  aux_logits 是否使用辅助分类器transform_input 是否对数据进行转换'''self.aux_logits = aux_logitsself.transform_input = transform_input# 头,输出初处理self.Conv2d_1a_3x3 = BasicConv2d(3, 32, kernel_size=3, stride=2)self.Conv2d_2a_3x3 = BasicConv2d(32, 32, kernel_size=3)self.Conv2d_2b_3x3 = BasicConv2d(32, 64, kernel_size=3, padding=1)self.Conv2d_3b_1x1 = BasicConv2d(64, 80, kernel_size=1)self.Conv2d_4a_3x3 = BasicConv2d(80, 192, kernel_size=3)# InceptionAself.Mixed_5b = InceptionA(192, pool_features=32)self.Mixed_5c = InceptionA(256, pool_features=64)self.Mixed_5d = InceptionA(288, pool_features=64)# 降维,通道增加self.Mixed_6a = ReductionA(288)# InceptionBself.Mixed_6b = InceptionB(768, channels_7x7=128)self.Mixed_6c = InceptionB(768, channels_7x7=160)self.Mixed_6d = InceptionB(768, channels_7x7=160)self.Mixed_6e = InceptionB(768, channels_7x7=192)# 辅助if aux_logits:self.AuxLogits = InceptionAux(768, num_classes)# 降维,通道增加self.Mixed_7a = ReductionB(768)# InceptionCself.Mixed_7b = InceptionC(1280)self.Mixed_7c = InceptionC(2048)self.fc = nn.Linear(2048, num_classes)def forward(self, x):# 数据转换if self.transform_input:  # 对数据进行标准化x = x.clone()x[:, 0] = x[:, 0] * (0.229 / 0.5) + (0.485 - 0.5) / 0.5x[:, 1] = x[:, 1] * (0.224 / 0.5) + (0.456 - 0.5) / 0.5x[:, 2] = x[:, 2] * (0.225 / 0.5) + (0.406 - 0.5) / 0.5# 299 x 299 x 3x = self.Conv2d_1a_3x3(x)# 129 x 149 x 32x = self.Conv2d_2a_3x3(x)# 147 x 147 x 32x = self.Conv2d_2b_3x3(x)# 147 x 147 x 64x = F.max_pool2d(x, kernel_size=3, stride=2)# 73 x 73 x 64x = self.Conv2d_3b_1x1(x)# 73 x 73 x 80x = self.Conv2d_4a_3x3(x)# 71 x 71 x 192         x = F.max_pool2d(x, kernel_size=3, stride=2)   # 35 x 35 x 192         x = self.Mixed_5b(x)       # 35 x 35 x 256        x = self.Mixed_5c(x)         # 35 x 35 x 288         x = self.Mixed_5d(x)         # 35 x 35 x 288         x = self.Mixed_6a(x)         # 17 x 17 x 768         x = self.Mixed_6b(x)     # 17 x 17 x 768        x = self.Mixed_6c(x)         # 17 x 17 x 768         x = self.Mixed_6d(x)         # 17 x 17 x 768         x = self.Mixed_6e(x)        # 17 x 17 x 768         if self.training and self.aux_logits:        # 在训练模型中使用       aux = self.AuxLogits(x)         # 17 x 17 x 768         x = self.Mixed_7a(x)         # 8 x 8 x 1280         x = self.Mixed_7b(x)         # 8 x 8 x 2048         x = self.Mixed_7c(x)         # 8 x 8 x 2048         x = F.avg_pool2d(x, kernel_size=8)         # 1 x 1 x 2048        x = F.dropout(x, training=self.training)         # 1 x 1 x 2048         x = x.view(x.size(0), -1)         # 2048         x = self.fc(x)         # num_classes      if self.training and self.aux_logits:          # 在训练模型中使用return x, auxreturn x
# 测试
device = "cuda" if torch.cuda.is_available() else "cpu"model = InceptionV3().to(device)
model
InceptionV3((Conv2d_1a_3x3): BasicConv2d((conv): Conv2d(3, 32, kernel_size=(3, 3), stride=(2, 2), bias=False)(bn): BatchNorm2d(32, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(Conv2d_2a_3x3): BasicConv2d((conv): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), bias=False)(bn): BatchNorm2d(32, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(Conv2d_2b_3x3): BasicConv2d((conv): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(Conv2d_3b_1x1): BasicConv2d((conv): Conv2d(64, 80, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(80, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(Conv2d_4a_3x3): BasicConv2d((conv): Conv2d(80, 192, kernel_size=(3, 3), stride=(1, 1), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(Mixed_5b): InceptionA((branch1x1): BasicConv2d((conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch5x5_1): BasicConv2d((conv): Conv2d(192, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(48, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch5x5_2): BasicConv2d((conv): Conv2d(48, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), bias=False)(bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3_1): BasicConv2d((conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3_2): BasicConv2d((conv): Conv2d(64, 96, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn): BatchNorm2d(96, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3_3): BasicConv2d((conv): Conv2d(96, 96, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn): BatchNorm2d(96, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch_pool): BasicConv2d((conv): Conv2d(192, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(32, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)))(Mixed_5c): InceptionA((branch1x1): BasicConv2d((conv): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch5x5_1): BasicConv2d((conv): Conv2d(256, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(48, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch5x5_2): BasicConv2d((conv): Conv2d(48, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), bias=False)(bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3_1): BasicConv2d((conv): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3_2): BasicConv2d((conv): Conv2d(64, 96, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn): BatchNorm2d(96, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3_3): BasicConv2d((conv): Conv2d(96, 96, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn): BatchNorm2d(96, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch_pool): BasicConv2d((conv): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)))(Mixed_5d): InceptionA((branch1x1): BasicConv2d((conv): Conv2d(288, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch5x5_1): BasicConv2d((conv): Conv2d(288, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(48, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch5x5_2): BasicConv2d((conv): Conv2d(48, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), bias=False)(bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3_1): BasicConv2d((conv): Conv2d(288, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3_2): BasicConv2d((conv): Conv2d(64, 96, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn): BatchNorm2d(96, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3_3): BasicConv2d((conv): Conv2d(96, 96, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn): BatchNorm2d(96, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch_pool): BasicConv2d((conv): Conv2d(288, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)))(Mixed_6a): ReductionA((branch3x3): BasicConv2d((conv): Conv2d(288, 384, kernel_size=(3, 3), stride=(2, 2), bias=False)(bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3db1_1): BasicConv2d((conv): Conv2d(288, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3db1_2): BasicConv2d((conv): Conv2d(64, 96, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn): BatchNorm2d(96, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3db1_3): BasicConv2d((conv): Conv2d(96, 96, kernel_size=(3, 3), stride=(2, 2), bias=False)(bn): BatchNorm2d(96, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)))(Mixed_6b): InceptionB((branch1x1): BasicConv2d((conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7_1): BasicConv2d((conv): Conv2d(768, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(128, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7_2): BasicConv2d((conv): Conv2d(128, 128, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)(bn): BatchNorm2d(128, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7_3): BasicConv2d((conv): Conv2d(128, 192, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_1): BasicConv2d((conv): Conv2d(768, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(128, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_2): BasicConv2d((conv): Conv2d(128, 128, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)(bn): BatchNorm2d(128, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_3): BasicConv2d((conv): Conv2d(128, 128, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)(bn): BatchNorm2d(128, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_4): BasicConv2d((conv): Conv2d(128, 128, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)(bn): BatchNorm2d(128, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_5): BasicConv2d((conv): Conv2d(128, 192, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch_pool): BasicConv2d((conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)))(Mixed_6c): InceptionB((branch1x1): BasicConv2d((conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7_1): BasicConv2d((conv): Conv2d(768, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7_2): BasicConv2d((conv): Conv2d(160, 160, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)(bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7_3): BasicConv2d((conv): Conv2d(160, 192, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_1): BasicConv2d((conv): Conv2d(768, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_2): BasicConv2d((conv): Conv2d(160, 160, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)(bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_3): BasicConv2d((conv): Conv2d(160, 160, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)(bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_4): BasicConv2d((conv): Conv2d(160, 160, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)(bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_5): BasicConv2d((conv): Conv2d(160, 192, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch_pool): BasicConv2d((conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)))(Mixed_6d): InceptionB((branch1x1): BasicConv2d((conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7_1): BasicConv2d((conv): Conv2d(768, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7_2): BasicConv2d((conv): Conv2d(160, 160, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)(bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7_3): BasicConv2d((conv): Conv2d(160, 192, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_1): BasicConv2d((conv): Conv2d(768, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_2): BasicConv2d((conv): Conv2d(160, 160, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)(bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_3): BasicConv2d((conv): Conv2d(160, 160, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)(bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_4): BasicConv2d((conv): Conv2d(160, 160, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)(bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_5): BasicConv2d((conv): Conv2d(160, 192, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch_pool): BasicConv2d((conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)))(Mixed_6e): InceptionB((branch1x1): BasicConv2d((conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7_1): BasicConv2d((conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7_2): BasicConv2d((conv): Conv2d(192, 192, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7_3): BasicConv2d((conv): Conv2d(192, 192, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_1): BasicConv2d((conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_2): BasicConv2d((conv): Conv2d(192, 192, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_3): BasicConv2d((conv): Conv2d(192, 192, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_4): BasicConv2d((conv): Conv2d(192, 192, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7dbl_5): BasicConv2d((conv): Conv2d(192, 192, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch_pool): BasicConv2d((conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)))(Mixed_7a): ReductionB((branch3x3_1): BasicConv2d((conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3_2): BasicConv2d((conv): Conv2d(192, 320, kernel_size=(3, 3), stride=(2, 2), bias=False)(bn): BatchNorm2d(320, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7x3_1): BasicConv2d((conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7x3_2): BasicConv2d((conv): Conv2d(192, 192, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7x3_3): BasicConv2d((conv): Conv2d(192, 192, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch7x7x3_4): BasicConv2d((conv): Conv2d(192, 192, kernel_size=(3, 3), stride=(2, 2), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)))(Mixed_7b): InceptionC((branch1x1): BasicConv2d((conv): Conv2d(1280, 320, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(320, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3_1): BasicConv2d((conv): Conv2d(1280, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3_2a): BasicConv2d((conv): Conv2d(384, 384, kernel_size=(1, 3), stride=(1, 1), padding=(0, 1), bias=False)(bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3_2b): BasicConv2d((conv): Conv2d(384, 384, kernel_size=(3, 1), stride=(1, 1), padding=(1, 0), bias=False)(bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3b1_1): BasicConv2d((conv): Conv2d(1280, 448, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(448, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3b1_2): BasicConv2d((conv): Conv2d(448, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3b1_3a): BasicConv2d((conv): Conv2d(384, 384, kernel_size=(1, 3), stride=(1, 1), padding=(0, 1), bias=False)(bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3b1_3b): BasicConv2d((conv): Conv2d(384, 384, kernel_size=(3, 1), stride=(1, 1), padding=(1, 0), bias=False)(bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch_pool): BasicConv2d((conv): Conv2d(1280, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)))(Mixed_7c): InceptionC((branch1x1): BasicConv2d((conv): Conv2d(2048, 320, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(320, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3_1): BasicConv2d((conv): Conv2d(2048, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3_2a): BasicConv2d((conv): Conv2d(384, 384, kernel_size=(1, 3), stride=(1, 1), padding=(0, 1), bias=False)(bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3_2b): BasicConv2d((conv): Conv2d(384, 384, kernel_size=(3, 1), stride=(1, 1), padding=(1, 0), bias=False)(bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3b1_1): BasicConv2d((conv): Conv2d(2048, 448, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(448, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3b1_2): BasicConv2d((conv): Conv2d(448, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3b1_3a): BasicConv2d((conv): Conv2d(384, 384, kernel_size=(1, 3), stride=(1, 1), padding=(0, 1), bias=False)(bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch3x3b1_3b): BasicConv2d((conv): Conv2d(384, 384, kernel_size=(3, 1), stride=(1, 1), padding=(1, 0), bias=False)(bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True))(branch_pool): BasicConv2d((conv): Conv2d(2048, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)(bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)))(fc): Linear(in_features=2048, out_features=1000, bias=True)
)
model(torch.randn(32, 3, 299, 299).to(device)).shape
torch.Size([32, 1000])

8、查看模型详情

import torchsummary as summary summary.summary(model, (3, 299, 299))
----------------------------------------------------------------Layer (type)               Output Shape         Param #
================================================================Conv2d-1         [-1, 32, 149, 149]             864BatchNorm2d-2         [-1, 32, 149, 149]              64BasicConv2d-3         [-1, 32, 149, 149]               0Conv2d-4         [-1, 32, 147, 147]           9,216BatchNorm2d-5         [-1, 32, 147, 147]              64BasicConv2d-6         [-1, 32, 147, 147]               0Conv2d-7         [-1, 64, 147, 147]          18,432BatchNorm2d-8         [-1, 64, 147, 147]             128BasicConv2d-9         [-1, 64, 147, 147]               0Conv2d-10           [-1, 80, 73, 73]           5,120BatchNorm2d-11           [-1, 80, 73, 73]             160BasicConv2d-12           [-1, 80, 73, 73]               0Conv2d-13          [-1, 192, 71, 71]         138,240BatchNorm2d-14          [-1, 192, 71, 71]             384BasicConv2d-15          [-1, 192, 71, 71]               0Conv2d-16           [-1, 64, 35, 35]          12,288BatchNorm2d-17           [-1, 64, 35, 35]             128BasicConv2d-18           [-1, 64, 35, 35]               0Conv2d-19           [-1, 48, 35, 35]           9,216BatchNorm2d-20           [-1, 48, 35, 35]              96BasicConv2d-21           [-1, 48, 35, 35]               0Conv2d-22           [-1, 64, 35, 35]          76,800BatchNorm2d-23           [-1, 64, 35, 35]             128BasicConv2d-24           [-1, 64, 35, 35]               0Conv2d-25           [-1, 64, 35, 35]          12,288BatchNorm2d-26           [-1, 64, 35, 35]             128BasicConv2d-27           [-1, 64, 35, 35]               0Conv2d-28           [-1, 96, 35, 35]          55,296BatchNorm2d-29           [-1, 96, 35, 35]             192BasicConv2d-30           [-1, 96, 35, 35]               0Conv2d-31           [-1, 96, 35, 35]          82,944BatchNorm2d-32           [-1, 96, 35, 35]             192BasicConv2d-33           [-1, 96, 35, 35]               0Conv2d-34           [-1, 32, 35, 35]           6,144BatchNorm2d-35           [-1, 32, 35, 35]              64BasicConv2d-36           [-1, 32, 35, 35]               0InceptionA-37          [-1, 256, 35, 35]               0Conv2d-38           [-1, 64, 35, 35]          16,384BatchNorm2d-39           [-1, 64, 35, 35]             128BasicConv2d-40           [-1, 64, 35, 35]               0Conv2d-41           [-1, 48, 35, 35]          12,288BatchNorm2d-42           [-1, 48, 35, 35]              96BasicConv2d-43           [-1, 48, 35, 35]               0Conv2d-44           [-1, 64, 35, 35]          76,800BatchNorm2d-45           [-1, 64, 35, 35]             128BasicConv2d-46           [-1, 64, 35, 35]               0Conv2d-47           [-1, 64, 35, 35]          16,384BatchNorm2d-48           [-1, 64, 35, 35]             128BasicConv2d-49           [-1, 64, 35, 35]               0Conv2d-50           [-1, 96, 35, 35]          55,296BatchNorm2d-51           [-1, 96, 35, 35]             192BasicConv2d-52           [-1, 96, 35, 35]               0Conv2d-53           [-1, 96, 35, 35]          82,944BatchNorm2d-54           [-1, 96, 35, 35]             192BasicConv2d-55           [-1, 96, 35, 35]               0Conv2d-56           [-1, 64, 35, 35]          16,384BatchNorm2d-57           [-1, 64, 35, 35]             128BasicConv2d-58           [-1, 64, 35, 35]               0InceptionA-59          [-1, 288, 35, 35]               0Conv2d-60           [-1, 64, 35, 35]          18,432BatchNorm2d-61           [-1, 64, 35, 35]             128BasicConv2d-62           [-1, 64, 35, 35]               0Conv2d-63           [-1, 48, 35, 35]          13,824BatchNorm2d-64           [-1, 48, 35, 35]              96BasicConv2d-65           [-1, 48, 35, 35]               0Conv2d-66           [-1, 64, 35, 35]          76,800BatchNorm2d-67           [-1, 64, 35, 35]             128BasicConv2d-68           [-1, 64, 35, 35]               0Conv2d-69           [-1, 64, 35, 35]          18,432BatchNorm2d-70           [-1, 64, 35, 35]             128BasicConv2d-71           [-1, 64, 35, 35]               0Conv2d-72           [-1, 96, 35, 35]          55,296BatchNorm2d-73           [-1, 96, 35, 35]             192BasicConv2d-74           [-1, 96, 35, 35]               0Conv2d-75           [-1, 96, 35, 35]          82,944BatchNorm2d-76           [-1, 96, 35, 35]             192BasicConv2d-77           [-1, 96, 35, 35]               0Conv2d-78           [-1, 64, 35, 35]          18,432BatchNorm2d-79           [-1, 64, 35, 35]             128BasicConv2d-80           [-1, 64, 35, 35]               0InceptionA-81          [-1, 288, 35, 35]               0Conv2d-82          [-1, 384, 17, 17]         995,328BatchNorm2d-83          [-1, 384, 17, 17]             768BasicConv2d-84          [-1, 384, 17, 17]               0Conv2d-85           [-1, 64, 35, 35]          18,432BatchNorm2d-86           [-1, 64, 35, 35]             128BasicConv2d-87           [-1, 64, 35, 35]               0Conv2d-88           [-1, 96, 35, 35]          55,296BatchNorm2d-89           [-1, 96, 35, 35]             192BasicConv2d-90           [-1, 96, 35, 35]               0Conv2d-91           [-1, 96, 17, 17]          82,944BatchNorm2d-92           [-1, 96, 17, 17]             192BasicConv2d-93           [-1, 96, 17, 17]               0ReductionA-94          [-1, 768, 17, 17]               0Conv2d-95          [-1, 192, 17, 17]         147,456BatchNorm2d-96          [-1, 192, 17, 17]             384BasicConv2d-97          [-1, 192, 17, 17]               0Conv2d-98          [-1, 128, 17, 17]          98,304BatchNorm2d-99          [-1, 128, 17, 17]             256BasicConv2d-100          [-1, 128, 17, 17]               0Conv2d-101          [-1, 128, 17, 17]         114,688BatchNorm2d-102          [-1, 128, 17, 17]             256BasicConv2d-103          [-1, 128, 17, 17]               0Conv2d-104          [-1, 192, 17, 17]         172,032BatchNorm2d-105          [-1, 192, 17, 17]             384BasicConv2d-106          [-1, 192, 17, 17]               0Conv2d-107          [-1, 128, 17, 17]          98,304BatchNorm2d-108          [-1, 128, 17, 17]             256BasicConv2d-109          [-1, 128, 17, 17]               0Conv2d-110          [-1, 128, 17, 17]         114,688BatchNorm2d-111          [-1, 128, 17, 17]             256BasicConv2d-112          [-1, 128, 17, 17]               0Conv2d-113          [-1, 128, 17, 17]         114,688BatchNorm2d-114          [-1, 128, 17, 17]             256BasicConv2d-115          [-1, 128, 17, 17]               0Conv2d-116          [-1, 128, 17, 17]         114,688BatchNorm2d-117          [-1, 128, 17, 17]             256BasicConv2d-118          [-1, 128, 17, 17]               0Conv2d-119          [-1, 192, 17, 17]         172,032BatchNorm2d-120          [-1, 192, 17, 17]             384BasicConv2d-121          [-1, 192, 17, 17]               0Conv2d-122          [-1, 192, 17, 17]         147,456BatchNorm2d-123          [-1, 192, 17, 17]             384BasicConv2d-124          [-1, 192, 17, 17]               0InceptionB-125          [-1, 768, 17, 17]               0Conv2d-126          [-1, 192, 17, 17]         147,456BatchNorm2d-127          [-1, 192, 17, 17]             384BasicConv2d-128          [-1, 192, 17, 17]               0Conv2d-129          [-1, 160, 17, 17]         122,880BatchNorm2d-130          [-1, 160, 17, 17]             320BasicConv2d-131          [-1, 160, 17, 17]               0Conv2d-132          [-1, 160, 17, 17]         179,200BatchNorm2d-133          [-1, 160, 17, 17]             320BasicConv2d-134          [-1, 160, 17, 17]               0Conv2d-135          [-1, 192, 17, 17]         215,040BatchNorm2d-136          [-1, 192, 17, 17]             384BasicConv2d-137          [-1, 192, 17, 17]               0Conv2d-138          [-1, 160, 17, 17]         122,880BatchNorm2d-139          [-1, 160, 17, 17]             320BasicConv2d-140          [-1, 160, 17, 17]               0Conv2d-141          [-1, 160, 17, 17]         179,200BatchNorm2d-142          [-1, 160, 17, 17]             320BasicConv2d-143          [-1, 160, 17, 17]               0Conv2d-144          [-1, 160, 17, 17]         179,200BatchNorm2d-145          [-1, 160, 17, 17]             320BasicConv2d-146          [-1, 160, 17, 17]               0Conv2d-147          [-1, 160, 17, 17]         179,200BatchNorm2d-148          [-1, 160, 17, 17]             320BasicConv2d-149          [-1, 160, 17, 17]               0Conv2d-150          [-1, 192, 17, 17]         215,040BatchNorm2d-151          [-1, 192, 17, 17]             384BasicConv2d-152          [-1, 192, 17, 17]               0Conv2d-153          [-1, 192, 17, 17]         147,456BatchNorm2d-154          [-1, 192, 17, 17]             384BasicConv2d-155          [-1, 192, 17, 17]               0InceptionB-156          [-1, 768, 17, 17]               0Conv2d-157          [-1, 192, 17, 17]         147,456BatchNorm2d-158          [-1, 192, 17, 17]             384BasicConv2d-159          [-1, 192, 17, 17]               0Conv2d-160          [-1, 160, 17, 17]         122,880BatchNorm2d-161          [-1, 160, 17, 17]             320BasicConv2d-162          [-1, 160, 17, 17]               0Conv2d-163          [-1, 160, 17, 17]         179,200BatchNorm2d-164          [-1, 160, 17, 17]             320BasicConv2d-165          [-1, 160, 17, 17]               0Conv2d-166          [-1, 192, 17, 17]         215,040BatchNorm2d-167          [-1, 192, 17, 17]             384BasicConv2d-168          [-1, 192, 17, 17]               0Conv2d-169          [-1, 160, 17, 17]         122,880BatchNorm2d-170          [-1, 160, 17, 17]             320BasicConv2d-171          [-1, 160, 17, 17]               0Conv2d-172          [-1, 160, 17, 17]         179,200BatchNorm2d-173          [-1, 160, 17, 17]             320BasicConv2d-174          [-1, 160, 17, 17]               0Conv2d-175          [-1, 160, 17, 17]         179,200BatchNorm2d-176          [-1, 160, 17, 17]             320BasicConv2d-177          [-1, 160, 17, 17]               0Conv2d-178          [-1, 160, 17, 17]         179,200BatchNorm2d-179          [-1, 160, 17, 17]             320BasicConv2d-180          [-1, 160, 17, 17]               0Conv2d-181          [-1, 192, 17, 17]         215,040BatchNorm2d-182          [-1, 192, 17, 17]             384BasicConv2d-183          [-1, 192, 17, 17]               0Conv2d-184          [-1, 192, 17, 17]         147,456BatchNorm2d-185          [-1, 192, 17, 17]             384BasicConv2d-186          [-1, 192, 17, 17]               0InceptionB-187          [-1, 768, 17, 17]               0Conv2d-188          [-1, 192, 17, 17]         147,456BatchNorm2d-189          [-1, 192, 17, 17]             384BasicConv2d-190          [-1, 192, 17, 17]               0Conv2d-191          [-1, 192, 17, 17]         147,456BatchNorm2d-192          [-1, 192, 17, 17]             384BasicConv2d-193          [-1, 192, 17, 17]               0Conv2d-194          [-1, 192, 17, 17]         258,048BatchNorm2d-195          [-1, 192, 17, 17]             384BasicConv2d-196          [-1, 192, 17, 17]               0Conv2d-197          [-1, 192, 17, 17]         258,048BatchNorm2d-198          [-1, 192, 17, 17]             384BasicConv2d-199          [-1, 192, 17, 17]               0Conv2d-200          [-1, 192, 17, 17]         147,456BatchNorm2d-201          [-1, 192, 17, 17]             384BasicConv2d-202          [-1, 192, 17, 17]               0Conv2d-203          [-1, 192, 17, 17]         258,048BatchNorm2d-204          [-1, 192, 17, 17]             384BasicConv2d-205          [-1, 192, 17, 17]               0Conv2d-206          [-1, 192, 17, 17]         258,048BatchNorm2d-207          [-1, 192, 17, 17]             384BasicConv2d-208          [-1, 192, 17, 17]               0Conv2d-209          [-1, 192, 17, 17]         258,048BatchNorm2d-210          [-1, 192, 17, 17]             384BasicConv2d-211          [-1, 192, 17, 17]               0Conv2d-212          [-1, 192, 17, 17]         258,048BatchNorm2d-213          [-1, 192, 17, 17]             384BasicConv2d-214          [-1, 192, 17, 17]               0Conv2d-215          [-1, 192, 17, 17]         147,456BatchNorm2d-216          [-1, 192, 17, 17]             384BasicConv2d-217          [-1, 192, 17, 17]               0InceptionB-218          [-1, 768, 17, 17]               0Conv2d-219          [-1, 192, 17, 17]         147,456BatchNorm2d-220          [-1, 192, 17, 17]             384BasicConv2d-221          [-1, 192, 17, 17]               0Conv2d-222            [-1, 320, 8, 8]         552,960BatchNorm2d-223            [-1, 320, 8, 8]             640BasicConv2d-224            [-1, 320, 8, 8]               0Conv2d-225          [-1, 192, 17, 17]         147,456BatchNorm2d-226          [-1, 192, 17, 17]             384BasicConv2d-227          [-1, 192, 17, 17]               0Conv2d-228          [-1, 192, 17, 17]         258,048BatchNorm2d-229          [-1, 192, 17, 17]             384BasicConv2d-230          [-1, 192, 17, 17]               0Conv2d-231          [-1, 192, 17, 17]         258,048BatchNorm2d-232          [-1, 192, 17, 17]             384BasicConv2d-233          [-1, 192, 17, 17]               0Conv2d-234            [-1, 192, 8, 8]         331,776BatchNorm2d-235            [-1, 192, 8, 8]             384BasicConv2d-236            [-1, 192, 8, 8]               0ReductionB-237           [-1, 1280, 8, 8]               0Conv2d-238            [-1, 320, 8, 8]         409,600BatchNorm2d-239            [-1, 320, 8, 8]             640BasicConv2d-240            [-1, 320, 8, 8]               0Conv2d-241            [-1, 384, 8, 8]         491,520BatchNorm2d-242            [-1, 384, 8, 8]             768BasicConv2d-243            [-1, 384, 8, 8]               0Conv2d-244            [-1, 384, 8, 8]         442,368BatchNorm2d-245            [-1, 384, 8, 8]             768BasicConv2d-246            [-1, 384, 8, 8]               0Conv2d-247            [-1, 384, 8, 8]         442,368BatchNorm2d-248            [-1, 384, 8, 8]             768BasicConv2d-249            [-1, 384, 8, 8]               0Conv2d-250            [-1, 448, 8, 8]         573,440BatchNorm2d-251            [-1, 448, 8, 8]             896BasicConv2d-252            [-1, 448, 8, 8]               0Conv2d-253            [-1, 384, 8, 8]       1,548,288BatchNorm2d-254            [-1, 384, 8, 8]             768BasicConv2d-255            [-1, 384, 8, 8]               0Conv2d-256            [-1, 384, 8, 8]         442,368BatchNorm2d-257            [-1, 384, 8, 8]             768BasicConv2d-258            [-1, 384, 8, 8]               0Conv2d-259            [-1, 384, 8, 8]         442,368BatchNorm2d-260            [-1, 384, 8, 8]             768BasicConv2d-261            [-1, 384, 8, 8]               0Conv2d-262            [-1, 192, 8, 8]         245,760BatchNorm2d-263            [-1, 192, 8, 8]             384BasicConv2d-264            [-1, 192, 8, 8]               0InceptionC-265           [-1, 2048, 8, 8]               0Conv2d-266            [-1, 320, 8, 8]         655,360BatchNorm2d-267            [-1, 320, 8, 8]             640BasicConv2d-268            [-1, 320, 8, 8]               0Conv2d-269            [-1, 384, 8, 8]         786,432BatchNorm2d-270            [-1, 384, 8, 8]             768BasicConv2d-271            [-1, 384, 8, 8]               0Conv2d-272            [-1, 384, 8, 8]         442,368BatchNorm2d-273            [-1, 384, 8, 8]             768BasicConv2d-274            [-1, 384, 8, 8]               0Conv2d-275            [-1, 384, 8, 8]         442,368BatchNorm2d-276            [-1, 384, 8, 8]             768BasicConv2d-277            [-1, 384, 8, 8]               0Conv2d-278            [-1, 448, 8, 8]         917,504BatchNorm2d-279            [-1, 448, 8, 8]             896BasicConv2d-280            [-1, 448, 8, 8]               0Conv2d-281            [-1, 384, 8, 8]       1,548,288BatchNorm2d-282            [-1, 384, 8, 8]             768BasicConv2d-283            [-1, 384, 8, 8]               0Conv2d-284            [-1, 384, 8, 8]         442,368BatchNorm2d-285            [-1, 384, 8, 8]             768BasicConv2d-286            [-1, 384, 8, 8]               0Conv2d-287            [-1, 384, 8, 8]         442,368BatchNorm2d-288            [-1, 384, 8, 8]             768BasicConv2d-289            [-1, 384, 8, 8]               0Conv2d-290            [-1, 192, 8, 8]         393,216BatchNorm2d-291            [-1, 192, 8, 8]             384BasicConv2d-292            [-1, 192, 8, 8]               0InceptionC-293           [-1, 2048, 8, 8]               0Linear-294                 [-1, 1000]       2,049,000
================================================================
Total params: 23,834,568
Trainable params: 23,834,568
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 1.02
Forward/backward pass size (MB): 224.12
Params size (MB): 90.92
Estimated Total Size (MB): 316.07
----------------------------------------------------------------

3、参考资料

如何理解卷积神经网络中的通道(channel)_神经网络通道数-CSDN博客

相关文章:

深度学习基础--CNN经典网络之InceptionV3详解与复现(pytorch)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 InceptionV3是InceptionV1的升级版,虽然加大了计算量,但是当时效果是比VGG效果要好的。本次任务是探究InceptionV3结构并进行复…...

VOIP通信中的错误码

cancle报文 Reason: SIP;cause200;text"Call completed elsewhere" Reason: Q.850;cause26表示取消的原因是呼叫在其他地方已经完成表示Q.850标准中的原因码26,通常对应于“呼叫被取消”(Call Cancelled)487 Request Terminated Re…...

C++ STL编程-vector概念、对象创建

vector 概念:是常见的一种容器,被称为“柔性数组”。 在vector中,front()是数组中的第一个元素,back()是数组的最后一个元素。begin()是是指向第一个元素,end()是指向back()的后一个元素 vector的对象创建&#xff0…...

easyexcel使用模板填充excel坑点总结

1.单层map设置值是{属性},那使用两层map进行设置值,是不是可以使用{属性.属性},以为取出map里字段只用{属性}就可以设置值,那再加个.就可以从里边map取出对应属性,没有两层map写法 填充得到的文件打开报错 was empty (…...

C#学习第16天:聊聊反射

什么是反射? 定义:反射是一种机制,允许程序在运行时获取关于自身的信息,并且可以动态调用方法、访问属性或创建实例。用途:常用于框架设计、工具开发、序列化、代码分析和测试等场景 反射的核心概念 1. 获取类型信息…...

【Unity】使用Cinemachine+CharacterController实现第三人称视角下的角色视角、移动和跳跃控制

1.初始配置 安装Cinemachine插件给角色添加CharacterConroller创建Cinemachine-->Free Look Camera在Free Look Camera中调整参数,Y Axis勾选Inver,X Axis取消勾选InverFree Look Camera要看向角色 跟随角色(自行设置,我就不…...

如何通俗的理解transformer架构编码器和解码器干的活

我们可以用生活中的比喻来理解Transformer的编码器和解码器,以及解码器中两种注意力的作用: 一、编码器(Encoder):理解信息的「分析师团队」 想象你要翻译一句话,比如把中文“今天天气很好”翻译成英文。编…...

React 受控表单绑定基础

React 中最常见的几个需求是: 渲染一组列表绑定点击事件表单数据与组件状态之间的绑定 受控表单绑定是理解表单交互的关键之一。 📍什么是受控组件? 在 React 中,所谓“受控组件”,指的是表单元素(如 &l…...

UMG:ListView

1.创建WEB_ListView,添加Border和ListView。 2.创建Object,命名为Item(数据载体,可以是其他类型)。新增变量name。 3.创建User Widget,命名为Entry(循环使用的UI载体).添加Border和Text。 4.设置Entry继承UserObjectListEntry接口。 5.Entry中对象生成时…...

实验五 内存管理实验

实验五 内存管理实验 一、实验目的 1、了解操作系统动态分区存储管理过程和方法。 2、掌握动态分区存储管理的主要数据结构--空闲表区。 3、加深理解动态分区存储管理中内存的分配和回收。 4、掌握空闲区表中空闲区3种不同放置策略的基本思想和实现过程。 5、通过模拟程…...

初识 Firebase 与 FPM

Firebase 是什么 ? Firebase 是 Google 旗下面向 iOS、Android、Web 与多端框架(Flutter、Unity 等)的应用开发平台,提供从「构建 → 发布与运维 → 增长」全生命周期的一站式后端即服务(BaaS)。它把实时数据库、托管…...

探索C++中的数据结构:栈(Stack)的奥秘

引言 栈是计算机科学中最基础且重要的数据结构之一,它像一摞盘子一样遵循"后进先出"(LIFO)的原则。无论是函数调用、表达式求值,还是浏览器前进后退功能,栈都扮演着关键角色。本文将深入解析栈的C实现及其应…...

vue3 nprogress 使用

nprogress 介绍与作用 1.nprogress 是一个轻量级的进度条组件,主要用于在页面加载或路由切换时显示一个进度条,提升用户体验。它的原理是通过在页面顶部创建一个 div,并使用 fixed 定位来实现进度条的效果 2.在 Vite Vue 3 项目中&#xf…...

MCP(Model Context Protocol 模型上下文协议)科普

MCP(Model Context Protocol,模型上下文协议)是由人工智能公司 Anthropic 于 2024年11月 推出的开放标准协议,旨在为大型语言模型(LLM)与外部数据源、工具及服务提供标准化连接,从而提升AI在实际…...

韩媒专访CertiK创始人顾荣辉:黑客攻击激增300%,安全优先的破局之路

4月17日,韩国知名科技媒体《韩国IT时报》(Korea IT Times)发布了对CertiK联合创始人兼CEO顾荣辉教授的专访。双方围绕CertiK一季度《HACK3D》安全报告,就黑客攻击手法的迭代和安全防御技术的创新路径等,展开深度对话。 顾荣辉认为&#xff0…...

华为openEuler操作系统全解析:起源、特性与生态对比

华为openEuler操作系统全解析:起源、特性与生态对比 一、起源与发展历程 openEuler(欧拉操作系统)是华为于2019年开源的Linux发行版,其前身为华为内部研发的服务器操作系统EulerOS。EulerOS自2010年起逐步发展,支持华…...

从零实现Git安装、使用

一、git安装 Git官方下载 1.下载exe程序 2.双击安装,一直点击next,默认安装 安装完成后,在任意文件夹右键,出现下图所示,即为安装成功。 3.【Git Bash Here】调出命令窗口,设置用户名和 email 地址。 gi…...

leetcode刷题日记——单词规律

[ 题目描述 ]: [ 思路 ]: 题目要求判断字符串 s 中的单词是否按照 pattern 这种模式排列具体思路和 205. 同构字符串基本一致,可以通过 hash 存储来实现思路二,通过字符串反推 pattern,如果一致,则遵循相…...

Ubuntu 修改语言报错Failed to download repository information

1.进入文件(ps:vim可能出现无法修改sources.list文件的问题) sudo gedit /etc/apt/sources.list2.修改(我是直接增添以下内容在其原始源前面,没有删原始内容)文件并保存,这里会替换原文件 deb http://mirrors.aliyun.com/ubuntu/ focal mai…...

烹饪与餐饮管理实训室数字课程开发方案

烹饪与餐饮管理专业需要具有餐饮产品设计、研发的能力; 具有饮食美学、科学配餐与高端宴席设计的能力; 具有餐饮企业、中央厨房运营管理的能力; 具有餐饮信息化系统应用、数字化运营的能力,这些能力的培养,需要烹饪与餐…...

关于模拟噪声分析的11个误区

目录 1. 降低电路中的电阻值总是能改善噪声性能 2. 所有噪声源的噪声频谱密度可以相加,带宽可以在最后计算时加以考虑 3. 手工计算时必须包括每一个噪声源 4. 应挑选噪声为ADC 1/10的ADC驱动器 5. 直流耦合电路中必须始终考虑1/f噪声 6. 因为1/f噪声随着频率降…...

基于 S2SH 架构的企业车辆管理系统:设计、实现与应用

在企业运营中,车辆管理是一项重要工作。随着企业规模的扩大,车辆数量增多,传统管理方式效率低下,难以满足企业需求。本文介绍的基于 S2SH 的企业车辆管理系统,借助现代化计算机技术,实现车辆、驾驶员和出车…...

51单片机实验七:EEPROM AT24C02 与单片机的通信实例

目录 一、实验环境与实验器材 二、实验内容及实验步骤 三、proteus复位电路 1.改电阻的阻值(方法一) 2.改电阻的属性(方法2) 一、实验环境与实验器材 环境:Keli,STC-ISP烧写软件,Proteus. …...

【TeamFlow】 1 TeamFlow 去中心化生产协同系统架构

总体架构设计 采用四层混合架构,结合分层设计与去中心化网络: #mermaid-svg-qBgw9wMd8Gi0gOci {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-qBgw9wMd8Gi0gOci .error-icon{fill:#552222;}…...

第 8 期:条件生成 DDPM:让模型“听话”地画图!

本期关键词:Conditional DDPM、Class Embedding、Label Control、CIFAR-10 条件生成 什么是条件生成(Conditional Generation)? 在标准的 DDPM 中,我们只是“随机生成”图像。 如果我想让模型生成「小狗」怎么办&…...

树莓派超全系列教程文档--(32)config.txt常用音频配置

config.txt常用音频配置 板载模拟音频(3.5mm耳机插孔)audio_pwm_modedisable_audio_ditherenable_audio_ditherpwm_sample_bits HDMI音频 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 板载模拟音频(3.5mm耳机…...

Perf学习

重要的能解决的问题是这些: perf_events is an event-oriented observability tool, which can help you solve advanced performance and troubleshooting functions. Questions that can be answered include: Why is the kernel on-CPU so much? What code-pa…...

量子神经网络编译器开发指南:从理论突破到产业落地全景解析

本文深度剖析IBM Qiskit 5.0量子经典混合编译器的技术架构,详解如何基于含噪量子处理器实现MNIST手写数字分类任务(准确率达89%)。结合本源量子云、百度量子等国内平台免费配额政策,系统性阐述量子神经网络开发的技术路线与资源获…...

守护者进程小练习

守护者进程含义 定义:守护进程(Daemon)是运行在后台的特殊进程,独立于控制终端,周期性执行任务或等待事件触发。它通常以 root 权限运行,名称常以 d 结尾(如 sshd, crond)。 特性&a…...

研究生面试常见问题

研究生面试是考研复试的重要环节,面试表现直接关系到录取结果。以下从面试流程、常见问题分类及回答技巧等方面为您整理了相关内容,帮助您更好地准备面试。 一、研究生面试的基本流程 自我介绍:通常需要准备1分钟左右的中文或英文自我介绍&a…...

极狐GitLab 登录限制如何设置?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 登录限制 (BASIC SELF) 您可以使用登录限制自定义 Web 界面以及基于 HTTP(S) 的 Git 的身份验证限制。 设置 要访问登录限…...

AI驱动商业变革:零售行业的智能化跃迁

引言:AI技术迈入黄金时代 2024年成为生成式AI(Gen AI)全面落地的关键年。据麦肯锡《技术趋势展望》报告,生成式AI相关投资同比增长​7倍​​,其经济价值预计达​​2.6-4.4万亿美元​​[1]。在零售领域,该技…...

初始图像学(6)

Camera类 我们之前学了很多的图形学知识和相关的程序,现在我们停下脚步,来好好整理一下我们学习的内容,我们将之前的视口代码和渲染代码合并到一个新的单类camera.h,这个类主要负责两项任务: 构建并发射光线到世界中 …...

【React】通过 fetch 发起请求,设置 proxy 处理跨域

fetch 基本使用跨域处理 fetch 基本使用 在node使用原生ajax发请求:XMLHttpRequest()1.获取xhr对象 2.注册回调函数 3.设置参数,请求头 4.发起连接原生ajax没有带异步处理 promise;原生ajax封装一下,以便重复调用jQuery&#…...

好数对的数目

题目描述 给你一个整数数组 nums。 如果一组数字 (i, j) 满足 nums[i] nums[j] 且 i < j&#xff0c;就可以认为这是一组 好数对。 返回 好数对 的数目。 示例 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,1,1,3] 输出&#xff1a;4 解释&#xff1a; 有 4 组好…...

Animated Raindrop Ripples In HLSL

这节课是利用材质做雨滴i效果 首先是创建一个圆环&#xff0c;实际上他就是为了创建一个圆&#xff0c;但是是空心的&#xff0c;可以看之前我的做法&#xff0c;这里以他的为准 创建圆环 就是当uv的点在max_radius和min_radius之间的时候绘制。 他这里写了ringThickness&a…...

Linux学习——守护进程编程

一、守护进程含义及实现过程 1、含义 守护进程&#xff08;Daemon Process&#xff09; 是操作系统中一种在后台长期运行的特殊进程&#xff0c;通常不与用户直接交互。它独立于控制终端&#xff0c;用于执行周期性任务或系统服务&#xff08;如日志管理、网络服务等&#xff…...

【C++】 —— 笔试刷题day_19

一、小易的升级之路 题目解析 小易现在要打游戏&#xff0c;现在游戏角色的初始能力值为a&#xff0c;我们会遇到n个怪&#xff0c;这些怪物的防御值为b1、b2、b3...&#xff0c;如果我们的能力值要高于或者等于怪物的防御值&#xff0c;那我们的能力值就会加bi&#xff1b;如…...

gitee提交大文件夹

# 安装 Git LFS&#xff08;如果未安装&#xff09; git lfs install# 跟踪整个大文件夹&#xff08;或特定大文件类型&#xff09; git lfs track "big_folder/**" # 替换为你的文件夹名# 提交并推送 git add .gitattributes big_folder/ git commit -m "add …...

纯CSS实现自动滚动到底部

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>自动滚动到底部</title><style>*…...

WInform当今技术特性分析

Windows Forms (WinForms) 技术特性分析 引言 Windows Forms (WinForms) 作为微软最早推出的基于.NET的图形用户界面开发框架&#xff0c;已经存在了20多年。在如今充满了各种现代UI框架的软件开发生态系统中&#xff0c;WinForms仍然保持着其独特的地位。本文将深入分析WinF…...

6.5 GitHub监控系统实战:双通道采集+动态调度打造高效运维体系

GitHub Sentinel Agent 定期更新功能设计与实现 关键词:GitHub API 集成、定时任务调度、Python 爬虫开发、SMTP 邮件通知、系统稳定性保障 1. GitHub 项目数据获取功能 1.1 双通道数据采集架构设计 #mermaid-svg-ZHJIMXcMAyDHVhmV {font-family:"trebuchet ms",v…...

自动驾驶安全模型研究

自动驾驶安全模型研究 自动驾驶安全模型研究 自动驾驶安全模型研究1.自动驾驶安全模型概述2. 自动驾驶安全模型应用3. 自动驾驶安全模型介绍3.1 Last Point to Steer3.2 Safety Zone3.3 RSS (Responsibility-Sensitive Safety)3.4 SFF (Safety Force Field)3.5 FSM (Fuzzy Safe…...

4090租用,各云GPU平台价格对比清单及建议

根据各平台的价格和型号配置&#xff0c;以下是通过DeepSeek-R1进行分析后&#xff0c;给出的建议。 一、按显存需求推荐 1.24G显存需求&#xff08;适合常规AI训练/推理、中小模型&#xff09; 性价比首选&#xff1a;智星云&#xff08;1.35元/小时&#xff09; &#xff0…...

Linux:简单指令(二)

文章目录 man ~~echocatcp指令which ~~mvless时间相关的指令find 要么对内容要么对属性操作 决定路径开始定位文件&#xff0c;也可以相对路径 家目录/ man ~~ 1查询具体命令 我们可以man man 可以看man 的描述 我们可以man 数字 ~~ 可以从上到下查询 2查询仿命令 3查询具体接口…...

代码随想录算法训练营day7(字符串)

华子目录 反转字符串中的单词思路 右旋字符串思路 反转字符串中的单词 https://leetcode.cn/problems/reverse-words-in-a-string/description/ 思路 先将字符串s按照空格切分为列表s_list&#xff08;使用s.split()&#xff09;再进行反转操作再将列表拼接为字符串&#xff…...

Android studio—socketIO库的emit与return的使用

文章目录 一、Socket.IO库简单使用说明1. 后端 Flask Flask-SocketIO2. Android 客户端集成 Socket.IO3. 布局文件注意事项 二、接受服务器消息的二种方法1. 客户端接收通过 emit 发送的消息功能使用场景后端代码&#xff08;Flask-SocketIO&#xff09;客户端代码&#xff08…...

【Drools+springboot3规则匹配】

文章目录 一、 业务场景概述二、整体技术架构三、Drools概述1. Drools 简介2. Drools Rete 算法与flink-cep的区别?2.1 Rete 算法概述2.2 Flink CEP 概述四、代码实现4.1 导入依赖4.2 从kafka消费数据4.3 核心类,触发匹配操作并将匹配数据写入mysql4.4 Drools 管理4.5 相关的…...

MAC-如果是分页查询,怎么分批次in;基于多线程的分页查询工具类

如果是分页查询,in怎么分批 在处理分页查询时,如果 IN 子句中的参数数量过大(例如超过数据库限制,如 MySQL 的 max_allowed_packet 或性能瓶颈),可以通过 ​​分批查询​​ 和 ​​结果合并​​ 的方式解决。以下是具体实现步骤: ​​1. 核心思路​​ 将大的 IN 列表拆…...

【MySQL】Ubuntu下C++连接MySQL

C连接MySQL ubuntu下载MySQL1.构建mysql对象&#xff0c;获得mysql访问句柄2.mysql的连接3.向mysqld下达命令(增删改)3.C_C查询细节处理3.1 下达查询命令3.2 转储查询结果3.3显示查询结果 4.编译链接 ubuntu下载MySQL sudo apt install libmysqlclient-dev下载完毕&#xff0c…...