【问题标题】:Generating random sequence in tensorflow with another tensor as seed用另一个张量作为种子在张量流中生成随机序列
【发布时间】:2019-01-29 15:19:00
【问题描述】:

我有一个用例,我需要在给定输入整数的情况下生成一个随机整数序列。在 python 中有很多方法可以做到这一点。我目前使用的如下:

import hashlib
def nextRandom(seed, length, maxval):
    md5 = hashlib.md5(str(hash(seed)).encode('utf-8'))
    for k in range(length):
        md5.update(str(k).encode('utf-8'))
        yield int(md5.hexdigest(), 16) % maxval

seed = 12345
length = 10
maxval = 1000
for randInt in nextRandom(seed, length, maxval):
    print(randInt)

这确保生成的序列在给定seed 值的情况下是固定的。

现在,我需要 tensorflow 中的类似功能,其中 seed 作为张量出现,返回的序列也应该是张量。

我在 tensorflow github 页面中检查了这个 issue,但找不到可行的解决方案。

【问题讨论】:

    标签: python tensorflow random random-seed hashlib


    【解决方案1】:

    这是tf.contrib.stateless 模块的一种可能解决方案:

    import tensorflow as tf
    
    seed = tf.random_uniform(shape=[2], dtype=tf.int64, maxval=1000000)
    x = tf.contrib.stateless.stateless_random_uniform(shape=(1, 1), dtype=tf.float32, seed=seed)
    
    sess = tf.Session()
    print(sess.run(x))
    

    请注意,stateless 模块不支持整数,除非在 stateless_multinomial 情况下。

    【讨论】:

    • 谢谢阿米尔。我能够将stateless_multinomial 用于以下任务:tf.squeeze(tf.contrib.stateless.stateless_multinomial((1.0/maxval)*tf.ones(shape=(1,maxval)), num_samples=tf.convert_to_tensor(length), seed=tf.convert_to_tensor((seed,1))))
    猜你喜欢
    • 1970-01-01
    • 2020-12-04
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多