【问题标题】:Correct validation of allennlp auto-encoder正确验证 allennlp 自动编码器
【发布时间】:2021-11-23 17:35:05
【问题描述】:

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

这由两个并行输入模块组成,一个嵌入输入的嵌入模块和一个编码标签的并行模块。 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-learning autoencoder allennlp


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 2019-07-01
      • 2020-12-11
      • 1970-01-01
      • 2021-04-12
      • 2011-04-25
      • 2011-06-09
      相关资源
      最近更新 更多