TensorFlow.js tf.多项式非预期结果[62083、37917],而不是[75000、25000]

yzuktlbb  于 2023-02-16  发布在  其他
关注(0)|答案(1)|浏览(122)

我正在使用TensorFlow.js库中的tf.multinomial函数,我希望得到[75000,25000]的结果,但实际上得到的是[62083,37917]。有人能解释一下为什么会发生这种情况,以及如何才能得到预期的结果吗?
我是TensorFlow.js的初学者,无法在API文档中找到有关tf.multinomial函数行为的正确信息

const tf = require('@tensorflow/tfjs-node');

const sample = []
const p = tf.tensor([0.75,0.25], [2], 'float32')
// or just p = [0.75,0.25]

for (let i = 0; i < 100000; i++) {
  const a = tf.multinomial(p, 1).arraySync()[0]
  sample[a] = (sample[a] || 0) + 1
}
console.log(sample) // should be something like [75000, 25000], but it is something like [62000, 38000]
jmo0nnb3

jmo0nnb31#

使用Math.log()函数计算概率,然后将其传递给tf.multinomial()函数可以避免此问题。
例如,您可以按如下方式定义概率:
const p = tf.tensor([Math.log(0.75), Math.log(0.25)], [2], 'float32')
并且结果将是正确的(例如[ 75043,24957 ]或类似的东西)。

相关问题