PyTorch模块 nn.Module 中关于 <模块名称> 的各种小知识点

这是小白哥,最近夜有所思,看一些模型的时候,产生了一个小疑问,就是模型在更新权重的时候,那些复杂的名字如何定义,以及其表示是如何的?,所以,也有所疑问的可以详细读一下下面我的总结。


前置
nn.Sequential([list]) 与 nn.Sequential(OrderDict) 的区别
nn.ModleList([])与 nn.Sequential([list]) 的区别
model.state_dict() 里究竟是什么
missing_key 与 unexpected_key 的区别
模型保存的方式
结尾

基于Pytorch的模块定义方式


对于Pytorch来说,基本目前看到过的定义模型方式有

import torch.nn
from collection import OrderDict
单层:nn.Linear 、nn.Conv 、nn.ReLU
多层: nn.ModleList([]) 、 nn.Sequential([list]) 、 nn.ModuleDict({
   }) 、 、nn.Sequential(OrderDict)

对于单层 没什么好说的 self.name = nn.Linear() name就是该层的名字

对于多层来说,可以理解成多个单层模块叠加为树的结构 它的名字是嵌套的,比如 net1.0 、net2.conv 就是多一层就是多一个点 .

为了解答这些问题,我们首先定义一个模型,模型设置如下:

class SimpleNet(nn.Module):
    def __init__(self, *args, **kwargs) -> None:
        super().__init__(*args, **kwargs)
        self.net1 = nn.ModuleList(
            [nn.Linear(10,10) for _ in range(10)]
        )
        self.net2 = nn.ModuleDict({
   
            'conv':nn.Conv2d(10,10,3),
            'relu': nn.ReLU()
        })
        self.net3 = nn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值