简要概括就是:
F.relu当函数用,nn.ReLU当模块定义用。
F.relu()一般在forward中用,nn.ReLU()在定义网络结构的时候用。
比如:
import torch.nn as nn
import torch.nn.functional as F
class NET1(nn.Module):
def __init__(self):
super(NET1, self).__init__()
self.conv = nn.Conv2d(3, 16, 3, 1, 1)
self.bn = nn.BatchNorm2d(16)
self.re = nn.ReLU() # 模块的激活函数
def foreward(self, x):
out = self.conv(x)
out = self.bn(x)
out = self.re()
return out
class NET2(nn.Module):
def __init__(self):
super(NET2, self).__init__()
self.conv = nn.Conv2d(3, 16, 3, 1, 1)
self.bn = nn.BatchNorm2d(16)
def foreward(self, x):
out = self.conv(x)
out = self.bn(x)
out = F.relu(out) # 函数的激活函数
return out
net1 = NET1()
net2 = NET2()
print(net1)
print(net2)
注意:当用print(net)输出时,会有nn.ReLU()层,而F.ReLU()是没有输出的。
本文最后更新于2021年8月15日,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!