1.nn.Module类理解
pytorch里面一切自定义操作基本上都是继承nn.Module类来实现的
方法预览:
classModule(object):def __init__(self):def forward(self, *input):defadd_module(self, name, module):def cuda(self, device=None):defcpu(self):def __call__(self, *input, **kwargs):def parameters(self, recurse=True):def named_parameters(self, prefix='', recurse=True):defchildren(self):defnamed_children(self):defmodules(self):def named_modules(self, memo=None, prefix=''):def train(self, mode=True):defeval(self):defzero_grad(self):def __repr__(self):def __dir__(self):'''有一部分没有完全列出来'''
我们在定义自已的网络的时候,需要继承nn.Module类,并重新实现构造函数__init__和forward这两个方法。但有一些注意技巧:
(1)一般把网络中具有可学习参数的层(如全连接层、卷积层等)放在构造函数__init__()中,当然我也可以吧不具有参数的层也放在里面;
(2)一般把不具有可学习参数的层(如ReLU、dropout、BatchNormanation层)可放在构造函数中,也可不放在构造函数中,如果不放在构造函数__init__里面,则在forward