Python 如何在PyTorch中更改模型的结构

Python 如何在PyTorch中更改模型的结构,python,neural-network,deep-learning,pytorch,Python,Neural Network,Deep Learning,Pytorch,我想建立一个堆叠的自动编码器或递归网络。这些都是建立动态神经网络所必需的,它可以在每次迭代中改变其结构 例如,我第一次坐火车 类网络(nn.Module): 定义初始化(自): 超级(网络,自我)。\uuuu初始化 self.fc1=nn.线性(784500) self.fc2=nn.线性(500784) def前进(自身,x): x=F.relu(自fc1(x)) x=F.relu(自身fc2(x)) 返回x 接下来,我想使用之前的fc1和fc2进行训练 类网络(nn.Module): 定义

我想建立一个堆叠的自动编码器或递归网络。这些都是建立动态神经网络所必需的,它可以在每次迭代中改变其结构

例如,我第一次坐火车

类网络(nn.Module):
定义初始化(自):
超级(网络,自我)。\uuuu初始化
self.fc1=nn.线性(784500)
self.fc2=nn.线性(500784)
def前进(自身,x):
x=F.relu(自fc1(x))
x=F.relu(自身fc2(x))
返回x
接下来,我想使用之前的fc1和fc2进行训练

类网络(nn.Module):
定义初始化(自):
超级(网络,自我)。\uuuu初始化
self.fc1=nn.线性(784500)
自fc3=nn.线性(500,10)
自身fc4=nn.线性(10500)
self.fc2=nn.线性(500784)
def前进(自身,x):
x=F.relu(自fc1(x))
x=F.relu(自身fc3(x))
x=F.relu(自身fc4(x))
x=F.relu(自身fc2(x))
返回x

如何在单个模型中构建这些网络?

您只需在转发函数中添加一个参数,即可在您想要的两种可能性之间切换:

class Net(nn.Module):
def __init__(self):
    super(Net, self).__init__()
    self.fc1 = nn.Linear(784,500)
    self.fc3 = nn.Linear(500,10)        
    self.fc4 = nn.Linear(10,500)
    self.fc2 = nn.Linear(500,784)

def forward(self, x, n_layers=2):
    if 2 == n_layers:
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        return x
    elif 4 == n_layers:
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc3(x))
        x = F.relu(self.fc4(x))
        x = F.relu(self.fc2(x))
        return x
    else:
        raise Exception("Not implemented")

你能再详细一点吗?你到底想要什么?例如,动态创建新层?您可以在forward方法中使用一个简单的for循环来实现这一点,该方法将取决于输入
x