function multinomial_(logits, numSamples, seed, normalized = false) {
    const $logits = (0, _tensorUtilEnv.convertToTensor)(logits, "logits", "multinomial");
    const numOutcomes = $logits.size;
    const origRank = $logits.rank;
    if (numOutcomes < 2) throw new Error(`Error in multinomial: you need at least 2 outcomes, but got ` + `${numOutcomes}.`);
    if (origRank > 2) throw new Error(`Rank of probabilities must be 1 or 2, but is ${origRank}`);
    // TODO(lina128): Investigate correct seed behavior. The code seems not allow
    // setting see to 0.
    seed = seed || Math.random();
    // The kernel only accepts (and returns) rank 2 tensors.
    const logits2D = origRank === 1 ? (0, _reshape.reshape)($logits, [
        1,
        -1
    ]) : $logits;
    const inputs = {
        logits: logits2D
    };
    const attrs = {
        numSamples,
        seed,
        normalized
    };
    // tslint:disable-next-line: no-unnecessary-type-assertion
    const res = (0, _engine.ENGINE).runKernel((0, _kernelNames.Multinomial), inputs, attrs);
    // tslint:disable-next-line:no-unnecessary-type-assertion
    return origRank === 1 ? (0, _reshape.reshape)(res, [
        res.size
    ]) : res;
}
Creates a `tf.Tensor` with values drawn from a multinomial distribution.

```js
const probs = tf.tensor([.75, .25]);
tf.multinomial(probs, 3).print();
```

@param logits 1D array with unnormalized log-probabilities, or
    2D array of shape `[batchSize, numOutcomes]`. See the `normalized`
    parameter.
@param numSamples Number of samples to draw for each row slice.
@param seed The seed number.
@param normalized Whether the provided `logits` are normalized true
    probabilities (sum to 1). Defaults to false.
@return 1D array of shape `[numSamples]`, or 2D array of shape
    `[batchSize, numSamples]`, depending on the rank of the input.

@doc {heading: 'Tensors', subheading: 'Random'}