相同输入下结果不同
e = Embedder(path) sents = [['Sam', 'goes', 'to', 'the', 'bank', 'every', 'day', '.']]
res1 = e.sents2elmo(sents) res2 = e.sents2elmo(sents)
雾草。。确实,每一次call都不一样
可能是inference的时候,dropout参数没有重置为0
可能是inference的时候,dropout参数没有重置为0
这就尴尬了
可能是inference的时候,dropout参数没有重置为0
e = Embedder(path) 在创建的时候已经 设置了 eval()模式, 我看了所有子模型的dropout也的确都是0
@Liujish931 我看了一下具体代码,只有frontend.py里面的定义的model设置了eval()模式。但是真正做inference的model,
.modules.elmo.ElmobiLm没有设置eval()模式。所以应该还是在inference的时候做了dropout
创建模型的get_model() 里面最后有model.eval(), modules.elmo.ElmobiLm只是整个模型的子模型 所以也会被设置为0 而且你可以运行的时候看 的确所有的dropout都是0
没错 eval() 会影响所有子模型的dropout和 batch normalisation, pytorch doc里有
@Liujish931 我看了一下具体代码,只有frontend.py里面的定义的model设置了eval()模式。但是真正做inference的model,
.modules.elmo.ElmobiLm没有设置eval()模式。所以应该还是在inference的时候做了dropout创建模型的get_model() 里面最后有model.eval(), modules.elmo.ElmobiLm只是整个模型的子模型 所以也会被设置为0 而且你可以运行的时候看 的确所有的dropout都是0
没错 eval() 会影响所有子模型的dropout和 batch normalisation, pytorch doc里有
那相同输入,输出却不同的真正原因是什么呢?
想问一下大家。不同的输出结果对你们有影响吗
----- 后来发现其实官方的elmo也是会变化的。
想问一下大家。不同的输出结果对你们有影响吗
----- 后来发现其实官方的elmo也是会变化的。 影响很大
想问一下大家。不同的输出结果对你们有影响吗 ----- 后来发现其实官方的elmo也是会变化的。 影响很大
这就太特么尬了。
其实还好。我感觉对我NER没什么太大影响
这个你们解决了吗
@Liujish931 我看了一下具体代码,只有frontend.py里面的定义的model设置了eval()模式。但是真正做inference的model,
.modules.elmo.ElmobiLm没有设置eval()模式。所以应该还是在inference的时候做了dropout创建模型的get_model() 里面最后有model.eval(), modules.elmo.ElmobiLm只是整个模型的子模型 所以也会被设置为0 而且你可以运行的时候看 的确所有的dropout都是0 没错 eval() 会影响所有子模型的dropout和 batch normalisation, pytorch doc里有
那相同输入,输出却不同的真正原因是什么呢? 真正的原因是在/ELMoForManyLangs/elmoformanylangs/modules/elmo.py 102行 有这么一条语句:self._update_states(final_states, restoration_indices) 将上一轮运算的 final_state作为下一次运算的 initial_states 这样会导致两次 elmo运算的 initial_states 不一致所以结果不一致。 不过不太清楚这么做的意义在哪儿,希望大神给个解答
@Liujish931 我看了一下具体代码,只有frontend.py里面的定义的model设置了eval()模式。但是真正做inference的model,
.modules.elmo.ElmobiLm没有设置eval()模式。所以应该还是在inference的时候做了dropout创建模型的get_model() 里面最后有model.eval(), modules.elmo.ElmobiLm只是整个模型的子模型 所以也会被设置为0 而且你可以运行的时候看 的确所有的dropout都是0 没错 eval() 会影响所有子模型的dropout和 batch normalisation, pytorch doc里有
那相同输入,输出却不同的真正原因是什么呢? 真正的原因是在/ELMoForManyLangs/elmoformanylangs/modules/elmo.py 102行 有这么一条语句:self._update_states(final_states, restoration_indices) 将上一轮运算的 final_state作为下一次运算的 initial_states 这样会导致两次 elmo运算的 initial_states 不一致所以结果不一致。 不过不太清楚这么做的意义在哪儿,希望大神给个解答
我能想到的是应该是训练的时候读的是document-level, 上下句(文)有联系吧