我的目标是训练跨度预测模型
可以预测BERT输出序列中的位置
我的输入形状是 (batch_size, max_sequence_len(512),embedding_size(768))
输出的形状将为 (batch_size , max_sequence_len , 1) 并且第三个暗淡代表概率,然后我将输出重塑为 (batch_size,max_sequence_len)
我的标签的形状是(batch_size,max_sequence_len),在max_sequence_len(512)中,只有一个位置为1,其他位置为零
我已经检查过了
(batch_size is 2)
start_pos_labels.sum(dim=1)
output >>
tensor([1.0000, 1.0000], device='cuda:0', dtype=torch.float64)
start_pred.sum(dim=1)
tensor([1., 1.], device='cuda:0', dtype=torch.float64, grad_fn=<SumBackward1>)
Run Code Online (Sandbox Code Playgroud)
但是当我使用 nn.KLDivLoss() 时,输出仍然为负,我真的不知道为什么
有人可以帮助我吗?谢谢!
这是我的代码模型代码
class posClassfication_new(nn.Module):
def __init__(self):
super(posClassfication_new, self).__init__()
self.start_task = nn.Sequential(
nn.Linear(768, 1),
# nn.ReLU(),
# nn.Linear(256, 128),
# nn.ReLU(),
# nn.Linear(128, 1)
)
self.end_task = nn.Sequential(
nn.Linear(768, 1),
# nn.ReLU(),
# nn.Linear(256, 128),
# nn.ReLU(),
# nn.Linear(128, 1)
)
#
def forward(self, start_x,end_x):
start_x = …Run Code Online (Sandbox Code Playgroud)