BERT 输出不确定
BERT output not deterministic
BERT 输出不确定。
当我输入相同的输入时,我希望输出值是确定性的,但我的 bert 模型值正在改变。听起来很别扭,同一个值返回两次,一次。也就是一旦有另一个值出来,同样的值又出来,如此反复。
如何使输出具有确定性?
让我展示我的代码片段。
我使用的模型如下。
对于BERT的实现,我使用huggingface实现的BERT pytorch实现。这是 pytorch 领域相当著名的模型 ri 实现。 [link] https://github.com/huggingface/pytorch-pretrained-BERT/
tokenizer = BertTokenizer.from_pretrained(self.bert_type, do_lower_case=self.do_lower_case, cache_dir=self.bert_cache_path)
pretrain_bert = BertModel.from_pretrained(self.bert_type, cache_dir=self.bert_cache_path)
bert_config = pretrain_bert.config
得到这样的输出
all_encoder_layer, pooled_output = self.model_bert(all_input_ids, all_segment_ids, all_input_mask)
# all_encoder_layer: BERT outputs from all layers.
# pooled_output: output of [CLS] vec.
pooled_output
tensor([[-3.3997e-01, 2.6870e-01, -2.8109e-01, -2.0018e-01, -8.6849e-02,
tensor([[ 7.4340e-02, -3.4894e-03, -4.9583e-03, 6.0806e-02, 8.5685e-02,
tensor([[-3.3997e-01, 2.6870e-01, -2.8109e-01, -2.0018e-01, -8.6849e-02,
tensor([[ 7.4340e-02, -3.4894e-03, -4.9583e-03, 6.0806e-02, 8.5685e-02,
对于所有编码器层,情况相同,-一次两次相同。
我从bert中提取word embedding特征,情况是一样的。
wemb_n
tensor([[[ 0.1623, 0.4293, 0.1031, ..., -0.0434, -0.5156, -1.0220],
tensor([[[ 0.0389, 0.5050, 0.1327, ..., 0.3232, 0.2232, -0.5383],
tensor([[[ 0.1623, 0.4293, 0.1031, ..., -0.0434, -0.5156, -1.0220],
tensor([[[ 0.0389, 0.5050, 0.1327, ..., 0.3232, 0.2232, -0.5383],
请尝试设置种子。我遇到了同样的问题并设置了种子以确保我们每次都获得相同的值。可能的原因之一可能是 BERT 中发生了 dropout。
BERT 输出不确定。 当我输入相同的输入时,我希望输出值是确定性的,但我的 bert 模型值正在改变。听起来很别扭,同一个值返回两次,一次。也就是一旦有另一个值出来,同样的值又出来,如此反复。 如何使输出具有确定性? 让我展示我的代码片段。 我使用的模型如下。
对于BERT的实现,我使用huggingface实现的BERT pytorch实现。这是 pytorch 领域相当著名的模型 ri 实现。 [link] https://github.com/huggingface/pytorch-pretrained-BERT/
tokenizer = BertTokenizer.from_pretrained(self.bert_type, do_lower_case=self.do_lower_case, cache_dir=self.bert_cache_path)
pretrain_bert = BertModel.from_pretrained(self.bert_type, cache_dir=self.bert_cache_path)
bert_config = pretrain_bert.config
得到这样的输出
all_encoder_layer, pooled_output = self.model_bert(all_input_ids, all_segment_ids, all_input_mask)
# all_encoder_layer: BERT outputs from all layers.
# pooled_output: output of [CLS] vec.
pooled_output
tensor([[-3.3997e-01, 2.6870e-01, -2.8109e-01, -2.0018e-01, -8.6849e-02,
tensor([[ 7.4340e-02, -3.4894e-03, -4.9583e-03, 6.0806e-02, 8.5685e-02,
tensor([[-3.3997e-01, 2.6870e-01, -2.8109e-01, -2.0018e-01, -8.6849e-02,
tensor([[ 7.4340e-02, -3.4894e-03, -4.9583e-03, 6.0806e-02, 8.5685e-02,
对于所有编码器层,情况相同,-一次两次相同。
我从bert中提取word embedding特征,情况是一样的。
wemb_n
tensor([[[ 0.1623, 0.4293, 0.1031, ..., -0.0434, -0.5156, -1.0220],
tensor([[[ 0.0389, 0.5050, 0.1327, ..., 0.3232, 0.2232, -0.5383],
tensor([[[ 0.1623, 0.4293, 0.1031, ..., -0.0434, -0.5156, -1.0220],
tensor([[[ 0.0389, 0.5050, 0.1327, ..., 0.3232, 0.2232, -0.5383],
请尝试设置种子。我遇到了同样的问题并设置了种子以确保我们每次都获得相同的值。可能的原因之一可能是 BERT 中发生了 dropout。