haiku生成随机数

这篇具有很好参考价值的文章主要介绍了haiku生成随机数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Haiku 遵循 JAX 的设计,生成的随机数是两个元素组成的列表。其中第一个元素是用于生成伪随机数的状态,第二个元素是用于分发密钥的子键。两个元素分别用于状态和子键,确保在分布式计算或并行计算中,多个随机数生成器的状态可以在一定程度上相互影响,从而提高随机性。
# 在实际使用中,你通常只需要整个列表或其中的一个元素即可。

rng_key[0]:状态;rng_key[1]:子键

Random Numbers

PRNGSequence(key_or_seed)

Iterator of JAX random keys.

next_rng_key()

Returns a unique JAX random key split from the current global key.

next_rng_keys(num)

Returns one or more JAX random keys split from the current global key.

maybe_next_rng_key()

next_rng_key() if random numbers are available, else None.

reserve_rng_keys(num)

Pre-allocate some number of JAX RNG keys.

with_rng(key)

Provides a new sequence for next_rng_key() to draw from.

maybe_get_rng_sequence_state()

Returns the internal state of the PRNG sequence.

replace_rng_sequence_state(state)

Replaces the internal state of the PRNG sequence with the given state.

import haiku as hk
import jax

### 1. class haiku.PRNGSequence(key_or_seed)
# Iterator of JAX random keys
seq = hk.PRNGSequence(42)  # OR pass a jax.random.PRNGKey

print(seq)
print(type(seq)) # class 'haiku._src.base.PRNGSequence

key1 = next(seq)
print(key1)
key2 = next(seq)
print(key2)
assert key1 is not key2

### 2. hk.next_rng_key()
# 获取下一个随机数生成器密钥的函数。
key = hk.next_rng_key()
_ = jax.random.uniform(key, [])

### 3. haiku.next_rng_keys(num)
# returns one or more JAX random keys split from the current global key.
k1, k2 = hk.next_rng_keys(2)
assert (k1 != k2).all()
a = jax.random.uniform(k1, [])
b = jax.random.uniform(k2, [])
assert a != b

### 4. haiku.reserve_rng_keys(num)
# 预留一定数量的随机数生成器密钥,并返回一个包含这些密钥的列表。
hk.reserve_rng_keys(2)  # Pre-allocate 2 keys for us to consume.
_ = hk.next_rng_key()   # Takes the first pre-allocated key.
_ = hk.next_rng_key()   # Takes the second pre-allocated key.
_ = hk.next_rng_key()   # Splits a new key.

### 5. haiku.with_rng(key)
# 在指定的上下文中使用给定的随机数生成器密钥。
# 通过 with hk.with_rng(rng_key):,我们创建了一个上下文,
# 确保在这个上下文中执行的随机操作使用了相同的随机数生成器密钥,从而使得两次调用的结果是可重复的。
with hk.with_rng(jax.random.PRNGKey(428)):
    s = jax.random.uniform(hk.next_rng_key(), ())
print("{:.1f}".format(s))

### 注:2,3,4,5 代码需在 hk.transform后的模块中使用
# hk.transform 是 Haiku 中的一个函数,用于将一个普通的 Python 函数(模块定义)转换为 Haiku 模块。通过转换,Haiku 将能够管理模块的参数、初始化和应用。

参考:

https://dm-haiku.readthedocs.io/en/latest/api.html?highlight=random#random-numbers文章来源地址https://www.toymoban.com/news/detail-808919.html

到了这里,关于haiku生成随机数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 中的随机数的基础常用的随机数生成方法

    在 Unity 中,可以使用 Random 类来生成随机数。以下是一些常用的随机数生成方法: Random.Range(min, max):生成一个在[min, max)范围内的随机整数。 Random.value:生成一个在[0, 1)范围内的随机浮点数。 Random.insideUnitCircle:生成一个在单位圆内的随机二维向量。 Random.insideUnitSphere:生成

    2024年02月20日
    浏览(53)
  • java生成随机数

       bound 必须是正数。 以下代码生成的是 0 到 30 的随机数。 生成区间的随机数:[最小值,最大值] 学的不是技术,更是梦想!!!

    2024年02月07日
    浏览(62)
  • Flutter 生成随机数

    如何让随机数变化? 我们尝试过的都知道,当你创建出来一个随机数后,调用他他的值是随机的,但是,这时候他的值就会固定住,不管怎么样都是随机出来的那个数,如果想要他每次都不一样的话,我们就想要使用刷新来让他变化了。 我们可以使用这样的方法来使他每次不一

    2024年02月13日
    浏览(45)
  • 生成随机数

    用于产生随机数 boolean nextBoolean() : 返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 boolean 值。 void nextBytes(byte[] bytes) : 生成随机字节并将其置于用户提供的 byte 数组中。 double nextDouble() : 返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之

    2024年02月03日
    浏览(52)
  • Hutool 生成随机数和随机字符串

    官方文档: https://www.hutool.cn/docs/#/core/工具类/随机工具-RandomUtil 整理完毕,完结撒花~

    2024年02月16日
    浏览(56)
  • 生成随机数——C语言

    在C语言中,可以使用标准库函数 rand() 来生成随机数。需要注意的是, rand() 函数生成的是伪随机数,具体的随机序列取决于种子(seed)的值。 下面是一个简单的示例代码,展示如何在C语言中生成随机数: 在上述代码中,首先包含了 stdio.h 、 stdlib.h 和 time.h 头文件来使用相

    2024年02月12日
    浏览(55)
  • 【Linux】随机数的生成

    /dev/random是一个随机数生成器设备文件,用于生成高质量的随机数。它通过收集系统上的环境噪声(例如硬件噪声,磁盘活动等)来产生随机数。由于它只在系统上有足够的环境噪声时才能生成随机数,因此/dev/random生成的随机数是高质量的。 但是,/dev/random的主要缺点是,如

    2024年02月11日
    浏览(44)
  • rust怎么生成随机数?

    在 Rust 中,有几种不同的方法可以实现随机数生成。以下是其中几种常见的方法,以及它们的优缺点: 优点: rand crate 是 Rust 中最常用的随机数库,提供了多种随机数生成器和功能。它易于使用,并且具有广泛的社区支持。 缺点: rand crate 生成的随机数是伪随机数,可能不

    2024年02月14日
    浏览(45)
  • MySQL、Oracle 生成随机ID、随机数、随机字符串

    UUID():是由128位的数字组成的全局唯一标识符。每次都生成一个新的随机数。 它通常以32个十六进制数的形式表示,分为5个部分,以连字符分隔。 UUID的长度是36个字符,包括32个十六进制数字和4个连字符。 UUID的标准格式是由 8-4-4-4-12 个十六进制数字组成的,其中每个部分的

    2024年01月16日
    浏览(56)
  • 如何使用Verilog生成随机数

    输入:时钟信号,复位信号,重新加载信号,种子 输出:随机数 输入一个种子32位,输出16位随机数;选取时钟,复位,重新加载种子。 // 使用32个逻辑单元用于D触发器/加法器和8个DSP块用于32x18=32位乘法 module c_rand (   input clk,         // 时钟输入   input rst,        

    2024年02月03日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包