为了账号安全,请及时绑定邮箱和手机立即绑定

谁能举一个小例子来解释 tf.random.categorical 的参数?

谁能举一个小例子来解释 tf.random.categorical 的参数?

回首忆惘然 2021-11-30 15:51:20
tensorflow 的网站给出了这个例子tf.random.categorical(tf.log([[10., 10.]]), 5)产生一个“形状为 [1, 5] 的张量,其中每个值是 0 或 1 的概率相等”我已经知道,基本的演示,tf.log([[10., 10.]]).我想知道的是 [batch_size, num_classes] 是做什么的,谁能举一个小例子来解释参数?
查看完整描述

2 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

正如您所注意到的,tf.random.categorical需要两个参数:

  • logits, 具有形状的 2D 浮动张量 [batch_size, num_classes]

  • num_samples,整数标量。

输出是一个形状为 的二维整数张量[batch_size, num_samples]

logits张量 ( logits[0, :]logits[1, :], ...) 的每一“行”代表不同分类分布的事件概率。不过,该函数并不期望实际概率值,而是期望未归一化的对数概率;所以实际的概率是softmax(logits[0, :])softmax(logits[1, :])等等。这样做的好处是你基本上可以给出任何实际值作为输入(例如神经网络的输出),它们将是有效的。此外,使用对数使用特定的概率值或比例也很简单。例如,两者[log(0.1), log(0.3), log(0.6)][log(1), log(3), log(6)]代表相同的概率,其中第二类的可能性是第一类的三倍,但只有第三类的一半。

对于(非标准化对数)概率的每一行,您都可以num_samples从分布中获得样本。每个样本是0和之间的整数num_classes - 1,根据给定的概率绘制。因此,结果是具有[batch_size, num_samples]每个分布的采样整数形状的 2D 张量。

编辑:函数的一个小例子。

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没有被抽样的概率。


查看完整回答
反对 回复 2021-11-30
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

希望这个简单的例子会有所帮助。

tf.random.categorical 需要两个参数:

  • logits, 形状 [batch_size, num_classes]

  • num_samples

前任:

list_indices.shape = (4, 10)

sampled_indices = tf.random.categorical(list_indices, num_samples=1)

sample_indices 将会

tf.Tensor(

[[2]

 [9]

 [4]

 [7]], shape=(4, 1), dtype=int64)

这意味着1 num_samples取出10 num_classes每4行行 ( batch_size)


查看完整回答
反对 回复 2021-11-30
  • 2 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信