#关于自定义层,有,单层自动注册(值为Module子类),单层手动注册, nn.ModulList([]) 默认0,1,2命名,可使用add_module()手动添加命名
# nn.Sequential(),nn.Sequential(collections.OrderedDict([二元元组元素])自己命名
class NeuralNetwork(nn.Module):
def __init__(self):
super(NeuralNetwork, self).__init__() #层名相同会覆盖
# 单层自动注册
self.layer = nn.Linear(3,3) #有该结构,必须是为Module子类
#层名为layers
# 单层手动注册
self.add_module('layer0',nn.Linear(3,3)) #等效于上面
# 多层手动注册
#列表类型,不是torch.nn.Module的子类,不会自动注册该结构,需要下面2行的手动注册
for i,layer1 in enumerate([nn.Linear(3,3) for _ in range(2)]):
self.add_module('layer1_{}'.format(i),layer1) #使用self.add_model手动注册模块
#层名,手动命名不能重复,不能包含点,重复后者会覆盖前者 layer1_0.weight layer1_1.weight
#多层手动注册和下边的多层自动注册效果相同,用nn.ModuleL
model 与model.children()比较
最新推荐文章于 2024-05-26 12:17:40 发布