GVKun编程网logo

使用 numpy.random.seed 的潜在狄利克雷分配的再现性

1

以上就是给各位分享使用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 的潜在狄利克雷分配的再现性

使用 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 有什么区别

如何解决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中 random:seed(A, B, C)这个产生的随机因子的作用是什么?

 请教一个ejabberd的问题:
在ejabberd.erl
中check_app_modules函数中的 random:seed(A, B, C)这个产生的随机因子的作用是什么?
求指导

java random seed 使用

java random seed 使用

Random random = new Random(50);
  • for (int j = 0; j < 8; j++) {
  • System.out.print(" " + random.nextInt(100) + ", ");
  • }
  • System.out.println();
  • for (int j = 0; j < 8; j++) {
  • System.out.print(" " + random.nextInt(100) + ", ");
  • }
  • System.out.println();
  • Random random2 = new Random(50);
  • for (int j = 0; j < 8; j++) {
  • System.out.print(" " + random2.nextInt(100) + ", ");
  • }
  • System.out.println();
  • for (int j = 0; j < 8; j++) {
  • System.out.print(" " + random2.nextInt(100) + ", ");
  • }
  • System.out.println();
  • System.out.println("-----------------------------------");
  • Random random3 = new Random();
  • for (int j &#
  • Math.random () 和 Random.nextInt () 区别

    Math.random () 和 Random.nextInt () 区别

    package cn.wangbingan.vip;
    
    import java.util.Random;
    
    /**
     * Math.random()和Random.nextInt()区别
     * 
     * @author AK
     * 
     */
    public class RandomTest {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		// 随机数对象
    		Random random = new Random();
    		// 开始时间
    		long startTime1 = System.nanoTime();
    		// 生成随机数
    		long a = random.nextInt(10000);
    		// 结束时间
    		long endTime1 = System.nanoTime();
    		// 耗时时间
    		long time1 = endTime1 - startTime1;
    		System.out.println("生成随机数:" + a + "=>Random耗时:" + time1);
    
    		// 开始时间
    		long startTime2 = System.nanoTime();
    		// 生成随机数
    		int b = (int) (Math.random() * 10000);
    		// 结束时间
    		long endTime2 = System.nanoTime();
    		// 耗时时间
    		long time2 = endTime2 - startTime2;
    		System.out.println("生成随机数:" + b + "=>Math耗时:" + time2);
    
    	}
    
    }

    输出结果:

    生成随机数:9441=>Random 耗时:11000

    生成随机数:7109=>Math 耗时:43000

    前者生成的随机数效率高于后者,时间上前者大约是后者 50% 到 80% 的时间,可能还要高.

    造成这个原因如下:

    Math.random () 是 Random.nextDouble()的一个内部方法.(所以肯定爸爸的效率高于儿子了)

    Random.nextDouble()使用 Random.next()两次,均匀的分布范围为 0 到 1 - (2 ^ -53).

    Random.nextInt(n)的使用 Random.next()不多于两次,返回值范围为 0 到 n - 1 的分布


    今天关于使用 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 替换 Python 中的嵌套循环(numpy替换元素)

    下一篇如何在没有 numpy 的情况下按列对列表列表中的所有数字求和?(numpy没有array)