Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Deep learning 嵌入层输出nan_Deep Learning_Pytorch_Transformer_Seq2seq - Fatal编程技术网

Deep learning 嵌入层输出nan

Deep learning 嵌入层输出nan,deep-learning,pytorch,transformer,seq2seq,Deep Learning,Pytorch,Transformer,Seq2seq,我正在尝试学习seq2seq模型。 嵌入层位于编码器中,它有时会在一些迭代后输出nan值。 我无法确定原因。 我怎样才能解决这个问题?? 问题是下面代码中转发函数的第一个emb_层 class TransformerEncoder(nn.Module): def __init__(self, vocab_size, hidden_size=1024, num_layers=6, dropout=0.2, input_pad=1, batch_first=False, embedder=

我正在尝试学习seq2seq模型。 嵌入层位于编码器中,它有时会在一些迭代后输出nan值。 我无法确定原因。 我怎样才能解决这个问题?? 问题是下面代码中转发函数的第一个emb_层


class TransformerEncoder(nn.Module):
    def __init__(self, vocab_size, hidden_size=1024, num_layers=6, dropout=0.2, input_pad=1, batch_first=False, embedder=None, init_weight=0.1):
        super(TransformerEncoder, self).__init__()
        self.input_pad = input_pad
        self.vocab_size = vocab_size
        self.num_layers = num_layers
        self.embedder = embedder

        if embedder is not None:
            self.emb_layer = embedder
        else:
            self.emb_layer = nn.Embedding(vocab_size, hidden_size, padding_idx=1)

        self.positional_encoder = PositionalEncoder()
        self.transformer_layers = nn.ModuleList()
        for _ in range(num_layers):
            self.transformer_layers.append(
                    TransformerEncoderBlock(num_heads=8, embedding_dim=1024, dropout=dropout))

    def set_mask(self, inputs):
        self.input_mask = (inputs == self.input_pad).unsqueeze(1)

    def forward(self, inputs):
        x = self.emb_layer(inputs)
        x = self.positional_encoder(x)

看起来有些重量变小了。其中一个可能的原因是,在某些迭代中,层输出为+-inf。如果向前输出为+-inf,向后输出为+-inf,当inf-inf=none时,权重将变为none,并且在所有后续迭代中都将输出none

您可以通过跟踪emb_层中的inf输出来检查这一点


如果这是原因,请尽量避免使用可能返回inf值的函数。

与我所遵循的教程相比,我的db太小了,我的嵌入对于我的可用数据来说太大了,因此最终NaN会通过网络传播。使我的嵌入网络更小(矩阵中因子/列的数量更少)为我解决了NaN问题。

请首先确定哪一个是获得NaN值的对应输入张量。如果不了解更多有关数据的信息,仅通过查看代码就不可能解决问题。我明白了。谢谢你的建议。我会先听你说的。非常感谢。我会试试这个并报告结果。