我正在使用pytorch作为我想做的一些机器翻译任务的基础。
实例化数据集时,我将每个torchtext.data作为实例。例如[list(untokenized_string_sentence),untokenized_string_sentence,untokenized_string_sentence]
其中untokenized_string_sentence只是一个原始示例句子。我已经确保在某些自定义forward
函数中将第一个输入作为列表处理时要小心。但是,我不知道批次损失计算是否正在相应地处理它,或者我是否需要注意这一点。我只是通过标签平滑和填充来调用nn.CrossEntropyLoss()
。经过两批处理后,结果是完全NaN
的前向通过(以及随后的NaN softmax值和损失)。
有人知道使用PyTorch进行不同类型的输入是否存在问题?
以下是我的类型的定义方式:
src_field = data.Field(init_token=None, eos_token=EOS_TOKEN,
pad_token=PAD_TOKEN, tokenize=tok_fun,
batch_first=True, lower=lowercase,
unk_token=UNK_TOKEN,
include_lengths=True)
trg_field = data.Field(init_token=BOS_TOKEN, eos_token=EOS_TOKEN,
pad_token=PAD_TOKEN, tokenize=tok_fun,
unk_token=UNK_TOKEN,
batch_first=True, lower=lowercase,
include_lengths=True)
prev_inputs_field = data.NestedField(data.Field(init_token=CONTEXT_TOKEN, eos_token=CONTEXT_EOS_TOKEN,
pad_token=PAD_TOKEN, tokenize=tok_fun,
batch_first=True, lower=lowercase,
unk_token=UNK_TOKEN,
include_lengths=False), tokenize=sent_fun)