我正在尝试在 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/