1.F.relu()与nn.relu()
out = F.ReLU(input)
nn.RuLU()
?F.ReLU()是函数调用,一般使用在foreward函数里。而nn.ReLU()是模块调用,一般在定义网络层的时候使用。
在PyTorch中,nn.X都有对应的函数版本F.X,但是并不是所有的F.X均可以用于forward或其它代码段中,在forward中使用的F.X函数一般均没有状态参数,比如F.ReLU,F.avg_pool2d等,均没有参数,它们可以用在任何代码片段中。
2.nn.Sequential
一个有序的容器,神经网络模块将按照在传入构造器的顺序依次被添加到计算图中执行,同时以神经网络模块为元素的有序字典也可以作为传入参数。
# Example of using Sequential ? ? ? ? model = nn.Sequential( ? ? ? ? ? ? ? ? ? nn.Conv2d(1,20,5), ? ? ? ? ? ? ? ? ? nn.ReLU(), ? ? ? ? ? ? ? ? ? nn.Conv2d(20,64,5), ? ? ? ? ? ? ? ? ? nn.ReLU() ? ? ? ? ? ? ? ? )
? ? ? ? # Example of using Sequential with OrderedDict ? ? ? ? model = nn.Sequential(OrderedDict([ ? ? ? ? ? ? ? ? ? ('conv1', nn.Conv2d(1,20,5)), ? ? ? ? ? ? ? ? ? ('relu1', nn.ReLU()), ? ? ? ? ? ? ? ? ? ('conv2', nn.Conv2d(20,64,5)), ? ? ? ? ? ? ? ? ? ('relu2', nn.ReLU()) ? ? ? ? ? ? ? ? ])) ———————————————— 版权声明:本文为CSDN博主「墨氲」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/dss_dssssd/article/details/82980222
3.add_module(name, module)
Adds a child module to the current module.
The module can be accessed as an attribute using the given name.
4.model.eval()和model.train()
如果模型中有BN层(Batch Normalization)和Dropout,需要在训练时添加model.train(),在测试时添加model.eval()。
其中model.train()是保证BN层用每一批数据的均值和方差,而model.eval()是保证BN用全部训练数据的均值和方差;而对于Dropout,model.train()是随机取一部分网络连接来训练更新参数,而model.eval()是利用到了所有网络连接。
|