Deep learning Pytorch中的任意形状前馈神经网络

Deep learning Pytorch中的任意形状前馈神经网络,deep-learning,pytorch,Deep Learning,Pytorch,我正在制作一个具有生成方面的脚本,我需要生成任意形状的前馈NNs。其思想是传递一个列表,其中每个层中有神经元的数量,层的数量由列表的长度决定: shape = [784,64,64,64,10] 我试过这样的方法: shapenn=[784,64,64,10] class Net(nn.Module): def __init__(self, shapenn): super().__init__() self.shapenn = shapenn

我正在制作一个具有生成方面的脚本,我需要生成任意形状的前馈NNs。其思想是传递一个列表,其中每个层中有神经元的数量,层的数量由列表的长度决定:

shape = [784,64,64,64,10]
我试过这样的方法: shapenn=[784,64,64,10]

class Net(nn.Module):
    def __init__(self, shapenn):
        super().__init__()
        self.shapenn = shapenn
        self.fcl = [] # list with fully conected leyers 
        for i in range(len(act_funs)):
            self.fcl.append(nn.Linear(self.nnarch[i],self.nnarch[i+1]))
net = Net(shapenn)
当在列表中正确创建完全连接的层时,
fcl
net
没有正确初始化,例如它没有
net.parameters()
。 我确信有一种正确的方法可以做到这一点,非常感谢您。

您需要使用内置的python列表来代替它(类似地使用python字典)。它们的行为类似于普通列表,只是它们必须仅包含子类
nn.Module
的实例,并且使用它们表示列表中包含的模块应被视为模块的子模块。比如说

将torch.nn导入为nn
类别网络(nn.模块):
定义初始化(自):
super()。\uuuu init\uuuuu()
self.fcl=nn.ModuleList()
对于范围(5)中的i:
自整装附加(nn.线性(10,10))
net=net()
打印([name代表name,val在net.named_parameters()]中)
印刷品

['fcl.0.weight', 'fcl.0.bias', 'fcl.1.weight', 'fcl.1.bias', 'fcl.2.weight', 'fcl.2.bias', 'fcl.3.weight', 'fcl.3.bias', 'fcl.4.weight', 'fcl.4.bias']
您需要使用内置的python列表(类似地使用python字典)。它们的行为类似于普通列表,只是它们必须仅包含子类
nn.Module
的实例,并且使用它们表示列表中包含的模块应被视为模块的子模块。比如说

将torch.nn导入为nn
类别网络(nn.模块):
定义初始化(自):
super()。\uuuu init\uuuuu()
self.fcl=nn.ModuleList()
对于范围(5)中的i:
自整装附加(nn.线性(10,10))
net=net()
打印([name代表name,val在net.named_parameters()]中)
印刷品

['fcl.0.weight', 'fcl.0.bias', 'fcl.1.weight', 'fcl.1.bias', 'fcl.2.weight', 'fcl.2.bias', 'fcl.3.weight', 'fcl.3.bias', 'fcl.4.weight', 'fcl.4.bias']