tensorflow的站点给出了这个例子

tf.random.categorical(tf.log([[10., 10.]]), 5)

生成“has shape[1,5]的张量,其中每个值都是0或1,概率相等”
我已经知道了,基本的demotf.log([[10., 10.]])的含义。
我想知道的是[批量大小,数值类]是做什么的,有人能举个小例子来解释参数吗?

最佳答案

正如您所注意到的,tf.random.categorical有两个参数:
logits,一个形状[batch_size, num_classes]的二维浮子张量
num_samples,整数标量。
输出是一个形状[batch_size, num_samples]的二维整数张量。
logits张量(logits[0, :]logits[1, :],…)的每个“行”表示不同categorical distribution的事件概率。但是,该函数并不期望实际的概率值,而是不规范的对数概率;因此实际的概率将是softmax(logits[0, :])softmax(logits[1, :]),等等。这样做的好处是,您可以基本上给出任何实际值作为输入(例如,神经网络的输出),它们将是有效的。另外,使用特定的概率值或比例,使用对数是很简单的。例如,[log(0.1), log(0.3), log(0.6)][log(1), log(3), log(6)]都表示相同的概率,其中第二类的概率是第一类的三倍,但只有第三类的一半。
对于每一行(非正规对数)概率,您可以从分布中获得num_samples样本。根据给定的概率,每个样本都是0num_classes - 1之间的整数。因此,结果是二维张量的形状[batch_size, num_samples]与每个分布的采样整数。
编辑:函数的一个小例子。

import tensorflow as tf

with tf.Graph().as_default(), tf.Session() as sess:
    tf.random.set_random_seed(123)
    logits = tf.log([[1., 1., 1., 1.],
                     [0., 1., 2., 3.]])
    num_samples = 30
    cat = tf.random.categorical(logits, num_samples)
    print(sess.run(cat))
    # [[3 3 1 1 0 3 3 0 2 3 1 3 3 3 1 1 0 2 2 0 3 1 3 0 1 1 0 1 3 3]
    #  [2 2 3 3 2 3 3 3 2 2 3 3 2 2 2 1 3 3 3 2 3 2 2 1 3 3 3 3 3 2]]

在本例中,结果是一个包含两行30列的数组。第一行中的值是从分类分布中采样的,其中每个类([0, 1, 2, 3])具有相同的概率。在第二行中,3类是最有可能的类,而0类没有被采样的可能性。

07-28 00:47