以上就是给各位分享使用numpy.random.seed的潜在狄利克雷分配的再现性,同时本文还将给你拓展dask.array.from_array(np.random.random)和dask.arr
以上就是给各位分享使用 numpy.random.seed 的潜在狄利克雷分配的再现性,同时本文还将给你拓展dask.array.from_array(np.random.random) 和 dask.array.random.random 有什么区别、ejabberd中 random:seed(A, B, C)这个产生的随机因子的作用是什么?、java random seed 使用、Math.random () 和 Random.nextInt () 区别等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- 使用 numpy.random.seed 的潜在狄利克雷分配的再现性
- dask.array.from_array(np.random.random) 和 dask.array.random.random 有什么区别
- ejabberd中 random:seed(A, B, C)这个产生的随机因子的作用是什么?
- java random seed 使用
- Math.random () 和 Random.nextInt () 区别
使用 numpy.random.seed 的潜在狄利克雷分配的再现性
如何解决使用 numpy.random.seed 的潜在狄利克雷分配的再现性
我正在使用 LDA 为大型软件项目执行主题建模。首次初始化应用程序时,我们会运行多个测试以确保一切正常。其中一项测试涉及使用玩具数据集检查 LDA 的输出,并对照该相同数据集的 LDA 已知结果。问题在于 LDA 本质上是随机的,如果我只是针对数据集运行 LDA,存储结果,然后将这些结果与稍后针对数据集运行的 LDA 进行比较,结果将大不相同。
因此,我在初始阶段和测试阶段运行 LDA 之前尝试使用 np.random.seed(111)
。这给了我完全一致的结果,这意味着我可以检查严格相等的结果(这使事情变得更容易)。也就是说,我注意到这不是最佳实践,因为它会影响全局随机数生成器,从而影响应用程序中的各种其他结果。我想做的是在测试期间设置种子,然后在测试完成后重置。在这一点上,我更喜欢不必传递 rng = np.random.default_rng(111)
对象,因为所有导航都是通过路线进行的,这可能是一个非常痛苦的事情。
我正在寻找有关如何最好地完成我想要的工作的建议。就像我说的,我认为最简单的方法就是 np.random.seed(111)
然后是 np.random.reset_seed
之类的东西(虽然这不是一个实际的函数,只是我希望的东西`)。>
解决方法
此时我的解决方案是在进行任何测试之前保存随机状态,然后在测试后恢复随机状态。
state_0 = np.random.get_state()
np.random.seed(111)
# DO SOME STUFF #
np.random.set_state(state_0)
我不知道这是否是执行此操作的最佳方法,但到目前为止它似乎有效......
dask.array.from_array(np.random.random) 和 dask.array.random.random 有什么区别
如何解决dask.array.from_array(np.random.random) 和 dask.array.random.random 有什么区别
遇到一种情况,我们需要训练一堆数据(大约22GiB),我用两种生成随机数据的方法进行了测试,并尝试用dask对其进行训练,但是Numpy生成的数据会引发异常(msgpack:字节对象太大)而 dask.array 一个工作。有人知道为什么吗?
from dask.distributed import Client
from dask_cuda import LocalCUDACluster
from dask import array as da
import numpy as np
import xgboost as xgb
import time
def main(client):
regressor = None
pre = None
n=3000
m=1000000
# numpy generated data will raise an exception
X = np.random.random((m,n))
y = np.random.random((m,1))
X = da.from_array(X,chunks=(1000,n))
y = da.from_array(y,1))
# data generated by dask.array works well
# X = da.random.random(size=(m,n),n))
# y = da.random.random(size=(m,1),1))
dtrain = xgb.dask.daskDMatrix(client,X,y)
del X
del y
params = {''tree_method'':''gpu_hist''}
watchlist = [(dtrain,''train'')]
start = time.time()
bst = xgb.dask.train(client,params,dtrain,num_boost_round=100,evals=watchlist)
print(''consume:'',time.time() - start)
if __name__ == ''__main__'':
with LocalCUDACluster(n_workers=4,device_memory_limit=''12 GiB'') as cluster:
with Client(cluster) as client:
main(client)
解决方法
经过几次测试,我找到了原因,da.random.random也是一个延迟函数(所以它只通过worker的定义是random),在我们的情况下,msgpack限制了数据大小( 4GiB) 传递给每个worker,因此,一般来说,对于超过 4GiB 的数据大小,它不会直接与 Dask XGBoost 通信(顺便说一句,我们可以切换到 parquet 数据并将其作为 dash.dataframe 块数据读取以绕过限制msgpack)
以下命令证明了我的猜测。
ejabberd中 random:seed(A, B, C)这个产生的随机因子的作用是什么?
在ejabberd.erl
中check_app_modules函数中的 random:seed(A, B, C)这个产生的随机因子的作用是什么?
求指导
java random seed 使用