首页 > 解决方案 > 正确验证 allennlp 自动编码器

问题描述

我正在尝试使用类似于https://aclanthology.org/N19-1289.pdf的模型来实现allennlp

这包括两个并行输入模块,一个嵌入输入的嵌入模块和一个编码标签的并行模块。MSE 损失用于鼓励两者产生相同的编码。

然后嵌入标签的输出通过一个输出模块,该模块重新创建原始标签。我有这个工作,但是,我相信我没有正确实施验证。为了验证,嵌入输入​​的输出应该通过解码器,而不是标签编码器的输出。

我不确定如何实现这一点allennlp,我需要检测模型是否正在前向方法中进行训练或验证,尽管两者都接收相同的参数(即同时提供 x 和 y)。

我目前的代码是

    embedded = self._embedder(text)
    if labels is not None:
        encoded = self._encoder(labels)
        decoded = self._decoder(encoded)

        # compute loss / accuracy
        encoder_loss = MSE(embedded, encoded)
        reconstruction_loss = CDL(labels, decoded)
    else:
        decoded = self._decoder(embedded)

但我想做的是

    embedded = self._embedder(text)
    if labels is not None:
        encoded = self._encoder(labels)
        if training:
            decoded = self._decoder(encoded)
        else:
            decoded = self._decoder(embedded)

        # compute loss / accuracy
        encoder_loss = MSE(embedded, encoded)
        reconstruction_loss = CDL(labels, decoded)
    else:
        decoded = self._decoder(embedded)

我该怎么做呢?我如何确保在验证模型时,但提供了模型没有将验证标签传递给编码器的标签(即,如果发生这种情况,验证不会测试嵌入式复制编码器的效果)?

标签: machine-learningautoencoderallennlp

解决方案


我找到了答案,module.training调用 model.eval() 时设置了一个属性。


推荐阅读