python - tf.random.categorical 给出奇怪的结果

标签 python tensorflow random

我正在尝试在 tensorflow 中实现 np.random.choice。这是我的实现

import numpy as np
import tensorflow as tf
p=tf.Variable(0,tf.int32)
selection_sample=[i for i in range(10)]#sample to select from
k=tf.convert_to_tensor(selection_sample)
samples = tf.random.categorical(tf.math.log([[1, 0.5, 0.3, 0.6]]),1)
sample_selected=tf.cast(samples[0][0],tf.int64)
op=tf.assign(p,k[sample_selected])
    #selection_sample[samples]
init=tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    print(sample_selected.eval())
    print(k.eval())
    print((sess.run(op)))
    print(p.eval())

然而,当 sample_selected 例如为 1 时,我希望 p.eval 为 1,即 k[1],但事实并非如此。例如运行此代码的示例输出是

3
[0 1 2 3 4 5 6 7 8 9]
1
1

然而 p.eval 应该是 k[3]sess.run(op) 也应该是 k[3] 我做错了什么。谢谢

最佳答案

当你这样做时:

print(sample_selected.eval())

您会得到一个从 tf.random.categorical 派生的随机值。该随机值由 session 返回,不会保存在其他任何地方。

然后,当您这样做时:

print((sess.run(op)))

您正在为变量 p 分配一个 在调用 run 时产生的随机值。这是打印的值,现在保存在变量中。

最后,当您这样做时:

print(p.eval())

您会看到当前存储在p 中的值,这是在之前调用run 时生成的随机值。

关于python - tf.random.categorical 给出奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57426761/

相关文章:

带引号的 Python argparse 参数

python - Jupyter Notebook : 'head' is not recognized as an internal or external command, 可运行的程序或批处理文件

python - `tf.train.Saver`收集变量保存在哪里?

tensorflow - 如何拆分 Tensorflow 数据集?

python - sklearn ColumnTransformer 与 MultilabelBinarizer

python - UDP python 到 c 打包的二进制数据 - struct.pack ('<ff' ,

python - 带有python随机数的大数组

java - Collections.shuffle 无法按 SimClock 随机值的预期工作

Python:set.add() 函数不添加重复项吗?

c - 时间相关的均匀分布随机数