Pytorch 用cfg构建网络结构

动机:一个model需要多次重复同一个block的时候,使用cfg/config文件构建网络是很方便的

  • 本篇是通过参考Pytorch源码,来进行相关学习的。一直以来觉得这种方法比较抽象,但其实看一看,还是很值得的,毕竟我们生活在21世纪,接下来做研究可以借助强大的GPU算力(啥时候有钱了)构造更多深层网络,只用一个列表写出来结构显然会比一层一层手动写出来灵活性更高,修改也比较省时省力。

  • 通过阅读本文,可以学到用for循环迭代cfg列表的形式来构建网络

方法1
  • 首先给出我参考源码写的

print("Testing addLayer...")

cfg = [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'M', 512, 512, 512, 'M', 512, 512, 512, 'M']


batch_norm = 1
layers = []
in_channel = 3 # VGG第一层输入是RGB三通道的图像
for i in cfg:
    if i == "M": # 当遇到M
        layers += [nn.MaxPool2d(kernel_size=2, stride=2)]

    else: # 如果遇到的不是M 那么就创建 多少入多少出的conv2d
        conv2d = nn.Conv2d(in_channel, i, kernel_size=3, padding=1)
        if batch_norm:
            layers += [conv2d, nn.BatchNorm2d(i), nn.ReLU(inplace=True)]
        else:
            layers += [conv2d, nn.ReLU(inplace=True)]
        in_channel = i  # VGG 里面,输入输出通道除了第一层以外都是相等的

a = nn.Sequential(* layers)

print(a)

方法2

使用nn.ModuleList


import torch.nn as nn

l1 = nn.Linear(10, 20)
l2 = nn.Linear(20, 30)

model_list = nn.ModuleList()

model_list.append(l1)
model_list.append(l2)

  • 参考
  1. inplace的作用
  2. Pytorch写好的几个Network
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值