ValueError:优化器在pytorch中获取了一个空参数列表

2024-06-25 06:52:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在PyTorch中实现Kalman滤波器。我构建了以下模型:

import torch
from torch import matmul, mm, nn

class DepthV1Acceleration(torch.nn.Module):
    def __init__(self, prediction_steps):
        super(DepthV1Acceleration, self).__init__()
        t = 1 / 30
        self.initial_P = torch.tensor([[0, 0, 0],
                                       [0, 1000, 0],
                                       [0, 0, 1000]])
        self.P = self.initial_P.clone()
        self.F = torch.tensor([[1, t, 0.5 * t ** 2],
                               [0, 1, t],
                               [0, 0, 0.9]])
        self.depth_acceleration = torch.tensor([0.9], requires_grad=True)
        self.F[2, 2] = self.depth_acceleration
        self.H = torch.tensor([[1, 0, 0]])
        self.R = torch.tensor([[0.01]], requires_grad=True)
        self.prediction_steps = prediction_steps

    def forward(self, measurements):
        output = torch.zeros(measurements[0], measurements[1] - self.prediction_steps, measurements[2])
        for i in range(measurements.shape[0]):
            self.P = self.initial_P.clone()
            x = measurements[i, 0, :]
            for j in range(measurements.shape[1], -1 * self.prediction_steps):
                z = measurements[i, j, :]
                y = z - mm(self.H, x)
                S = mm(mm(self.H, self.P), torch.transpose(self.H, 0, 1)) + self.R
                K = mm(mm(self.P, torch.transpose(self.H, 0, 1)) @ torch.inverse(S))
                x = x + mm(K, y)
                self.P = mm((torch.eye(10) - mm(K, self.H)), self.P)
                # prediction
                output_element = x.clone()
                x = mm(self.F, x)
                self.P = mm(mm(self.F, self.P), torch.transpose(self.F, 0, 1))
                for _ in range(self.prediction_steps):
                    output_element = mm(self.F, output_element)
                output[i, j, :] = output_element
        return output

它给了我ValueError: optimizer got an empty parameter list。我使用以下代码:

model = DepthV1Acceleration(3)
optimizer = torch.optim.Adam(model.parameters(), lr=0.0001)

我用同样的错误检查了其他问题,但没有发现与我的案例类似的问题


Tags: inselfforoutputclonerangetorchelement