我在logits对输入进行输出导数方面遇到了麻烦input_ids。这是我的输入示例:
# input_ids is a list of token ids got from BERT tokenizer
input_ids = torch.tensor([101., 1996., 2833., 2003., 2779., 1024., 6350., 102.], requires_grad=True)
content_outputs = self.bert(input_ids,
position_ids=position_ids, token_type_ids=token_type_ids,
attention_mask=attention_mask, head_mask=head_mask)
# content_outputs[1] is sentence embedding
logits = F.linear(content_outputs[1], self.W_s, self.b_s)
# Notes:
# - input_ids.dtype = torch.float32
# - input_ids.is_leaf = True
# - input_ids.requires_grad = True
# - Torch version: 1.0.1
要计算 的梯度input_ids,input_ids.dtype必须是浮点数;否则,我将收到以下错误:
RuntimeError:只有浮点 dtype 的张量才能需要渐变
但是,我的模型正在使用一个嵌入层,dtype=long如果我使用上面用浮点类型初始化的 input_ids,它需要输入会导致另一个问题:
RuntimeError:参数#1 'indices' 的预期张量具有标量类型 Long;但得到了 torch.FloatTensor (在检查嵌入参数时)
我也在 Stack Overflow 和 Stack Exchange 上进行了搜索,但没有发现与此问题相关的内容。请帮我解决一下这个。任何意见将不胜感激!