Pytorch 用cfg构建网络结构

本文介绍如何使用cfg配置文件和循环迭代方式构建深度学习模型,如VGG网络,通过列表形式定义网络结构,提高代码灵活性和效率。同时,介绍了使用nn.ModuleList管理网络层的方法。

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

动机:一个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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值