2022-03-18pytorch模型创建

本文详细介绍了深度学习网络的构建过程,包括如何使用PyTorch的nn.Module和nn.Sequential创建网络层,以及如何通过nn.ModuleList和nn.ModuleDict组织网络结构。文章还讨论了卷积和池化操作,如nn.Conv2d和nn.MaxPool2d,并提到了转置卷积。此外,还介绍了参数初始化、子模块的forward方法以及层的命名和管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模型创建

分为构建和拼接两步,构建是把卷积,全连接等层构建好,拼接是按一定顺序将这些层连接,前向传播。

torch.nn

  • nn.Parameter 张量子类,表示可学习参数,weight,bias
  • nn.Moduel 所有网络层基类,管理网络属性
    –nn.functional 函数的具体实现,如卷积,池化,激活函数等
  • nn.init 参数初始化方法

构建子模块

_init_()

nn.Module

在这里插入图片描述
最常用的parameters和modules字典,管理可学习参数和模型。

Containers

  • nn.Sequential 按顺序包装
  • nn.ModulelList 像python的list一样包装多个网络层
  • nn.ModuleDict 像python的dict一样包装多个网络层
    将Alexnet改写成OrderedDict,给层命名
class AlexNet(nn.Module):

    def __init__(self, num_classes: int = 1000) -> None:
        super(AlexNet, self).__init__()
        self.features = nn.Sequential(OrderedDict({
            'conv1': nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),
            'relu1': nn.ReLU(inplace=True),
            'maxpool1':nn.MaxPool2d(kernel_size=3, stride=2),
            'conv2': nn.Conv2d(64, 192, kernel_size=5, padding=2),
            'relu2':nn.ReLU(inplace=True),
            'maxpool2':nn.MaxPool2d(kernel_size=3, stride=2),
            'conv3':nn.Conv2d(192, 384, kernel_size=3, padding=1),
            'relu3':nn.ReLU(inplace=True),
            'conv4':nn.Conv2d(384, 256, kernel_size=3, padding=1),
            'relu4':nn.ReLU(inplace=True),
            'conv5':nn.Conv2d(256, 256, kernel_size=3, padding=1),
            'relu5':nn.ReLU(inplace=True),
            'maxpool3':nn.MaxPool2d(kernel_size=3, stride=2),
        }))
...
print(alexnet)
print(alexnet._modules['features']._modules.keys())#打印层别名

拼接子模块

forward()

ModuleList

  • append() 在Moduleist后面添加网络层
  • extend() 拼接两个ModuleList
  • insert() 指定在Moduleist中位置插入网络层

主要用于重复层的构建,比如10层全连接,就很方便。

nn.ModuleDict

  • clear() 清空ModuleDict
  • items() 返回可迭代的键值对
  • keys() 返回键
  • values() 返回字典值
  • pop() 返回一对键值,并从字典中删除

使用dict可以选择网络层,比如把激活函数都放一起,组装的时候选择其中一个。

卷积

在这里插入图片描述
卷积核在几个维度上滑动,就是几维卷积

nn.Conv2d 二维卷积

转置卷积
用于对图像进行上采样

卷积和转置卷积不是可逆的关系。

池化

nn.MaxPool2d
nn.MaxUnpool2d 反池化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值