0
点赞
收藏
分享

微信扫一扫

2022-03-18pytorch模型创建

读思意行 2022-03-18 阅读 21

模型创建

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

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 反池化

举报

相关推荐

0 条评论