nn.Sequential
用法
将多个模块进行封装
layer = nn.Sequential(nn.Conv2d(in_channels=128, out_channels=64,kernel_size)
nn.Sequential
内部实现了forward功能,可以直接调用
例如:
x = torch.randn(16, 128, 20, 20)
output = layer(x)
nn.ModuleList
,它是一个储存不同 module,并自动将每个 module 的 parameters 添加到网络之中的容器。你可以把任意 nn.Module 的子类 (比如 nn.Conv2d, nn.Linear 之类的) 加到这个 list 里面,方法和 Python 自带的 list 一样,无非是 extend,append 等操作。但不同于一般的 list,加入到 nn.ModuleList 里面的 module 是会自动注册到整个网络上的,同时 module 的 parameters 也会自动添加到整个网络中。
layer = nn.ModuleList([nn.Conv2d(in_channels=128, out_channels=64,kernel_size])
而nn.ModuleList
内部没有forword功能
例如:
报错
x = torch.randn(16, 128, 20, 20)
output = layer(x)
正确
x= torch.randn(16, 128, 20, 20)
for module in layer:
x= module(x)