线性pytorch模型初始化有问题

时间:2021-04-13 17:17:04

标签: python deep-learning neural-network pytorch initialization

我想弄清楚我的神经网络模型初始化有什么问题。我已经设置了一个 pdb 跟踪来查看定义神经网络部分是错误的来源。此外,我在定义的神经网络代码上得到黄色标记,因为预计会返回该模块,但如果我返回该模块,则会导致递归错误。它是一个线性模型,必须具有批量大小 * 81 的输入维度和批量大小 * 1 的输出维度。我在 pytorch 和定义深度神经网络方面相对较新,所以这可能不是一个好问题。我的语法也可能很糟糕。任何帮助表示赞赏。下面的代码是神经网络的定义和pytorch模型的训练。

def get_nnet_model(module_list=nn.ModuleList(), input_dim: int = 8100, layer_dim: int = 100) -> nn.Module:
    """ Get the neural network model
    @return: neural network model
    """
    device = torch.device('cpu')

    module_list.append(nn.Linear(input_dim, layer_dim))
    module_list[-1].weight.data.normal_(0, 0.1)
    module_list[-1].bias.data.zero_()


def train_nnet(nnet: nn.Module, states_nnet: np.ndarray, outputs: np.ndarray, batch_size: int = 100, num_itrs: int = 10000, train_itr: int = 10000, device: torch.device, lr=0.01, lr_d=1):
    nnet.train()

    criterion = nn.MSELoss()
    optimizer = optim.Adam(nnet.parameters(), lr=lr)

    while train_itr < num_itrs:
        optimizer.zero_grad()

        lr_itr = lr + (lr_d ** train_itr)
        for param_group in optimizer.param_groups:
            param_group['lr'] = lr_itr

        data = pickle.load(open("data/data.pkl", "rb"))
        nnet_inputs_np, nnet_targets_np = data
        nnet_inputs_np = nnet_inputs_np.astype(np.float32)

        nnet_inputs = torch.tensor(nnet_inputs_np, device=device)
        nnet_targets = torch.tensor(nnet_targets_np, device=device)

        nnet_inputs = nnet_inputs.float()
        nnet_outputs = nnet(nnet_inputs)

        loss = criterion(nnet_outputs, nnet_targets)
        loss.backward()
        optimizer.step()

1 个答案:

答案 0 :(得分:0)

根据您的评论,您的代码中的其他地方有类似的内容:

nnet = get_nnet_model(...)

但是,get_nnet_model(...) 没有返回任何内容。将 def get_nnet_model 更改为:

def get_nnet_model(module_list=nn.ModuleList(), input_dim: int = 8100, layer_dim: int = 100) -> nn.Module:
    """ Get the neural network model
    @return: neural network model
    """
    device = torch.device('cpu')

    module_list.append(nn.Linear(input_dim, layer_dim))
    module_list[-1].weight.data.normal_(0, 0.1)
    module_list[-1].bias.data.zero_()

    return module_list  # add this one