Python 如何在PyTorch中训练张量中的张量

Python 如何在PyTorch中训练张量中的张量,python,pytorch,Python,Pytorch,我有一个班级模型: class Model(nn.Module) 有两个可学习的参数: self.a = torch.nn.Parameter(torch.rand(1, requires_grad=True)) self.b = torch.nn.Parameter(torch.rand(1, requires_grad=True)) self.a = torch.tensor( [[ torch.nn.Parameter(torch.rand(1, requires_grad=True)

我有一个班级模型:

class Model(nn.Module)
有两个可学习的参数:

self.a = torch.nn.Parameter(torch.rand(1, requires_grad=True))
self.b = torch.nn.Parameter(torch.rand(1, requires_grad=True))
self.a = torch.tensor( [[ torch.nn.Parameter(torch.rand(1, requires_grad=True)) ] for i in range(5)] )
它内部还有一个神经网络类:

class Net_x(nn.Module)
因此,为了训练所有参数,我结合了可学习的参数“a,b”和NN的参数(在类模型的“init”下):

这很好,网络训练也很好

我的问题是,现在我试图将其中一个参数更改为参数张量的张量:

self.a = torch.nn.Parameter(torch.rand(1, requires_grad=True))
self.b = torch.nn.Parameter(torch.rand(1, requires_grad=True))
self.a = torch.tensor( [[ torch.nn.Parameter(torch.rand(1, requires_grad=True)) ] for i in range(5)] )
这是因为在每个时间步(不是历元),我都需要使用不同于self.a的参数

例如:

for epoch in range(n_epochs): 
    if timestep<5: 
        val = 50 - a[0] * b 
        loss = 10 - val 
    elif timestep >=5 and timestep < 10: 
        val = 50 - a[1] * b 
        loss = 10 - val
适用于范围内的历元(n_历元):
如果timestep=5且timestep<10:
val=50-a[1]*b
损失=10-val
模型运行时没有问题,但参数没有更新(即在每个历元中保持不变)

另外,我本想添加我的代码,但它确实很长。我希望答案很简单(如果不是,我会尝试减少代码并附加它)

尝试以下方法:

self.a = torch.tensor( [[ torch.nn.Parameter(torch.rand(1, requires_grad=True)) ] for i in range(5)], requires_grad = True )

默认情况下需要_grad=False
,因此我认为这可能是问题所在

哦,天哪。在我这方面,那是一个愚蠢的错误。谢谢