AlexNet

import torch
from torch import nn
from torch.nn import functional as F  #   ###########################

# AlexNet:  (卷积+池化)+(卷积+池化)+(卷积*3)+(池化)+(全连接*3)

# 设置输入数据
data=torch.ones(size=(10,3,227,227))  # 10个样本3个通道尺寸227*227

class Model(nn.Module):
    def __init__(self):
        super(Model,self).__init__()
        
        # 为了处理尺寸较大的原始图片,先使用11*11的卷积核和较大的步长来快速降低特征图的尺寸
        # 同时,使用比较多的通道数,来弥补降低尺寸造成的数据损失
        self.conv1=nn.Conv2d(3,96,kernel_size=11,stride=4)
        self.pool1=nn.MaxPool2d(kernel_size=3,stride=2)  # 池化的感受野会有重叠,重叠池化
        
        # 已经将特征图尺寸缩小到27*27,计算量可控,可以开始进行特征提取了
        # 卷积核、步长恢复到业界常用的大小,进一步扩大通道来提取数据
        self.conv2=nn.Conv2d(96,256,kernel_size=5,padding=2)
        self.pool2=nn.MaxPool2d(kernel_size=3,stride=2)
        
        # 疯狂提取特征,连续用多个卷积层
        # kernel 5, padding 2, kernel 3, padding 1  可以维持特征图的大小
        self.conv3=nn.Conv2d(256,384,kernel_size=3,padding=1)
        self.conv4=nn.Conv2d(384,384,kernel_size=3,padding=1)
        self.conv5=nn.Conv2d(384,256,kernel_size=3,padding=1)
        self.pool3=nn.MaxPool2d(kernel_size=3,stride=2)
        
        # 进入全连接层,进行信息汇总
        self.fc1=nn.Linear(6*6*256,4096)
        self.fc2=nn.Linear(4096,4096)
        self.fc3=nn.Linear(4096,1000)
    
    def forward(self,x):
        x=F.relu(self.conv1(x))
        x=self.pool1(x)
        
        x=F.relu(self.conv2(x))
        x=self.pool2(x)
        
        x=F.relu(self.conv3(x))
        x=F.relu(self.conv4(x))
        x=F.relu(self.conv5(x))
        x=self.pool3(x)
        
        x=x.view(-1,6*6*256) # 将数据拉平


        x=F.dropout(x,p=0.5)
        x=F.relu(F.dropout(self.fc1(x),p=0.5))
        x=F.relu(self.fc2(x))
        out=F.softmax(self.fc3(x),dim=1)
        return out

from torchinfo import summary
net=Model()
summary(net,input_size=(10,3,227,227))



==========================================================================================
Layer (type:depth-idx)                   Output Shape              Param #
==========================================================================================
Model                                    --                        --
├─Conv2d: 1-1                            [10, 96, 55, 55]          34,944
├─MaxPool2d: 1-2                         [10, 96, 27, 27]          --
├─Conv2d: 1-3                            [10, 256, 27, 27]         614,656
├─MaxPool2d: 1-4                         [10, 256, 13, 13]         --
├─Conv2d: 1-5                            [10, 384, 13, 13]         885,120
├─Conv2d: 1-6                            [10, 384, 13, 13]         1,327,488
├─Conv2d: 1-7                            [10, 256, 13, 13]         884,992
├─MaxPool2d: 1-8                         [10, 256, 6, 6]           --
├─Linear: 1-9                            [10, 4096]                37,752,832
├─Linear: 1-10                           [10, 4096]                16,781,312
├─Linear: 1-11                           [10, 1000]                4,097,000
==========================================================================================
Total params: 62,378,344
Trainable params: 62,378,344
Non-trainable params: 0
Total mult-adds (G): 11.36
==========================================================================================
Input size (MB): 6.18
Forward/backward pass size (MB): 52.74
Params size (MB): 249.51
Estimated Total Size (MB): 308.44
==========================================================================================

​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值