时间:2021-05-22
torch.nn.Modules 相当于是对网络某种层的封装,包括网络结构以及网络参数和一些操作
torch.nn.Module 是所有神经网络单元的基类
查看源码
初始化部分:
def __init__(self): self._backend = thnn_backend self._parameters = OrderedDict() self._buffers = OrderedDict() self._backward_hooks = OrderedDict() self._forward_hooks = OrderedDict() self._forward_pre_hooks = OrderedDict() self._state_dict_hooks = OrderedDict() self._load_state_dict_pre_hooks = OrderedDict() self._modules = OrderedDict() self.training = True属性解释:
方法定义:
def forward(self, *input): raise NotImplementedError没有实际内容,用于被子类的 forward() 方法覆盖
且 forward 方法在 __call__ 方法中被调用:
def __call__(self, *input, **kwargs): for hook in self._forward_pre_hooks.values(): hook(self, input) if torch._C._get_tracing_state(): result = self._slow_forward(*input, **kwargs) else: result = self.forward(*input, **kwargs) ... ...实例展示
简单搭建:
import torch.nn as nnimport torch.nn.functional as Fclass Net(nn.Module): def __init__(self, n_feature, n_hidden, n_output): super(Net, self).__init__() self.hidden = nn.Linear(n_feature, n_hidden) self.out = nn.Linear(n_hidden, n_output) def forward(self, x): x = F.relu(self.hidden(x)) x = self.out(x) return xNet 类继承了 torch 的 Module 和 __init__ 功能
hidden 是隐藏层线性输出
out 是输出层线性输出
打印出网络的结构:
>>> net = Net(n_feature=10, n_hidden=30, n_output=15)>>> print(net)Net( (hidden): Linear(in_features=10, out_features=30, bias=True) (out): Linear(in_features=30, out_features=15, bias=True))以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
pytorch中view是tensor方法,然而在sequential中包装的是nn.module的子类,因此需要自己定义一个方法:importtorch.nn
nn.Module中定义参数:不需要加cuda,可以求导,反向传播classBiFPN(nn.Module):def__init__(self,fpn_size
在迁移学习finetune时我们通常需要冻结前几层的参数不参与训练,在Pytorch中的实现如下:classModel(nn.Module):def__init
最近在刚从tensorflow转入pytorch,对于自定义的nn.Module碰到了个问题,即使把模组modle=Model().cuda(),里面的子Mod
在很多神经网络中,往往会出现多个层共享一个权重的情况,pytorch可以快速地处理权重共享问题。例子1:classConvNet(nn.Module):def_