在目标数据中使用缺失值训练 LSTM 神经网络 - 错误 optim.step()

Training LSTM neural network with missing values in target data - error optim.step()

提问人:tamnva 提问时间:11/17/2023 最后编辑:tamnva 更新时间:11/17/2023 访问量:32

问:

我想使用目标数据中的缺失值和用户定义的损失函数来训练 LSTM 神经网络。但是,在 optim.step() 之后有一个错误,一些权重/偏差是 nan。这有什么提示吗?谢谢


import torch
import numpy as np
from torch import nn

# Define a simple lstm model
class myLSTM(nn.Module):
    def __init__(self, input_size, hidden_size):
        super(myLSTM, self).__init__()
        self.lstm = nn.LSTM(input_size, hidden_size)
    def forward(self, input):
        output, _ = self.lstm(input)
        return output

# Input and target
input = torch.randn(10, 5, requires_grad=True)
target = torch.randn(10, 5)

# There is one missing values in the target data
target[0,0] = np.nan

# Create model
lstmModel = myLSTM(5, 5) 

# Loss function, optimization
def loss_function(y_true, y_predict):
    return torch.nanmean((y_true-y_predict)**2)

optim = torch.optim.Adam(lstmModel.parameters(), lr=0.01)

# Training with only 1 epoch
output = lstmModel(input)
optim.zero_grad()
error = loss_function(target, output)
error.backward()
optim.step()

lstmModel.state_dict()


Python LSTM NAN 火炬

评论


答:

1赞 Marco Parola 11/17/2023 #1

一种解决方案是屏蔽元素,请尝试以下操作:nan

def loss_function(y_true, y_predict):
    mask = ~torch.isnan(y_true)
    return torch.mean((y_true[mask] - y_predict[mask])**2)

评论

0赞 tamnva 12/13/2023
感谢您的建议,它现在可以工作了
0赞 Marco Parola 12/13/2023
伟大!如果您解决了问题,请通过接受答案来关闭帖子;)