我们的TMs返回的向量是双精度float64,看起来非常可疑,因为float32已经足够了。需要检查这种行为的原因以及具体的解决方法。第一步 - 查看测试中的这一行,之后 - 收集所有依赖于这个测试的TMs,并检查float64发生的位置和原因。结果 - 详细描述(位置和原因),并在讨论后(如果需要)修复这种行为。
float64
float32
m0rkklqb1#
请注意,Word2Vec/Doc2Vec类在向量/计算中使用float32。(我甚至进行了实验,将模型转换为float16作为优化;不幸的是,似乎大量数组计算仍然强制回退到/从float32,这意味着只有在静止状态下才能节省时间和空间。)
float16
kqlmhetl2#
开始调查。测试使用 TestBaseTopicModel 的类:
TestBaseTopicModel
TestAuthorTopicModel
TestHdpModel
TestLdaMallet
TestLdaModel
TestLsiModel
继续调查 LdaModel 。基本上,numpy 默认使用 float64 ,而在 LdaModel 中从未明确指定。
LdaModel
LdaState.__init__()
np.zeros()
sstats
LdaModel.__init__()
self.state.sstats = self.random_state.gamma(100., 1. / 100., (self.num_topics, self.num_terms))
nd.asarray
__init__()
因此,结果是一切都默认为 float64 ,所以在 get_topics() 中返回 float64 。
get_topics()
fae0ux8s3#
好的调查,感谢@xelez。我认为最好的解决方案是在构造函数中添加 dtype 参数,并在需要时显式地设置 dtype(而不是默认的 float64)。潜在地,我们可能会对另一个方法(包括训练)遇到同样的问题。如果这是真的——我们可以轻松地减少内存两次并加速模型🔥
dtype
cgfeq70w4#
@menshikh-iv 是否有重构计划?如果有,我认为应该用重构来完成。如果没有,那么我唯一能想到的方法就是检查每一行代码,找出应用dtype的地方。嗯,我认为我可以为LdaModel做这个工作,也许以后可以为其他模型做。但是如果有人也要参与其中,合并起来可能会变得非常困难。
68de4m5k5#
重构 - 是的,但不是很快。
我们讨论了这个问题,并决定给$x^{1m_{n}1x}$中的每个模型添加$x^{1m_{n}1x}$参数将是一个好主意(用于比较具有高/低精度的模型的实验的新字段)
如果你发起PR并开始工作,那就太好了:+1:
3bygqnnd6#
我相信默认应该是float32。这对word2vec/doc2vec(它们已经是float32)没有区别,但可能会改变LSI/LDA等。
6条答案
按热度按时间m0rkklqb1#
请注意,Word2Vec/Doc2Vec类在向量/计算中使用
float32
。(我甚至进行了实验,将模型转换为float16
作为优化;不幸的是,似乎大量数组计算仍然强制回退到/从float32
,这意味着只有在静止状态下才能节省时间和空间。)kqlmhetl2#
开始调查。
测试使用
TestBaseTopicModel
的类:TestAuthorTopicModel
TestHdpModel
TestLdaMallet
TestLdaModel
TestLsiModel
继续调查
LdaModel
。基本上,numpy 默认使用
float64
,而在LdaModel
中从未明确指定。LdaState.__init__()
使用np.zeros()
进行sstats
(然后用于计算主题)LdaModel.__init__()
执行self.state.sstats = self.random_state.gamma(100., 1. / 100., (self.num_topics, self.num_terms))
nd.asarray
在许多地方默认根据参数推断类型__init__()
,它们将保持原样(float64、float32 或其他)因此,结果是一切都默认为
float64
,所以在get_topics()
中返回float64
。fae0ux8s3#
好的调查,感谢@xelez。
我认为最好的解决方案是在构造函数中添加
dtype
参数,并在需要时显式地设置dtype
(而不是默认的float64
)。潜在地,我们可能会对另一个方法(包括训练)遇到同样的问题。如果这是真的——我们可以轻松地减少内存两次并加速模型🔥cgfeq70w4#
@menshikh-iv 是否有重构计划?如果有,我认为应该用重构来完成。
如果没有,那么我唯一能想到的方法就是检查每一行代码,找出应用
dtype
的地方。嗯,我认为我可以为
LdaModel
做这个工作,也许以后可以为其他模型做。但是如果有人也要参与其中,合并起来可能会变得非常困难。68de4m5k5#
重构 - 是的,但不是很快。
我们讨论了这个问题,并决定给$x^{1m_{n}1x}$中的每个模型添加$x^{1m_{n}1x}$参数将是一个好主意(用于比较具有高/低精度的模型的实验的新字段)
如果你发起PR并开始工作,那就太好了:+1:
3bygqnnd6#
我相信默认应该是
float32
。这对word2vec/doc2vec(它们已经是float32)没有区别,但可能会改变LSI/LDA等。