【发布时间】: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