【问题标题】:What is the output of the dl4j lstm neural network?dl4j lstm 神经网络的输出是什么?
【发布时间】:2021-09-22 09:13:35
【问题描述】:

我正在研究文本生成示例https://github.com/eclipse/deeplearning4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/advanced/modelling/charmodelling/generatetext/GenerateTxtCharCompGraphModel.java。 lstm网络的输出是一个概率分布,据我理解,这是一个双精度数组,其中每个值表示字符对应于数组中索引的概率。所以我无法理解我们从分布中获取字符索引的以下代码:

/** Given a probability distribution over discrete classes, sample from the distribution
 * and return the generated class index.
 * @param distribution Probability distribution over classes. Must sum to 1.0
 */
static int sampleFromDistribution(double[] distribution, Random rng){
    double d = 0.0;
    double sum = 0.0;
    for( int t=0; t<10; t++ ) {
        d = rng.nextDouble();
        sum = 0.0;
        for( int i=0; i<distribution.length; i++ ){
            sum += distribution[i];
            if( d <= sum ) return i;
        }
        //If we haven't found the right index yet, maybe the sum is slightly
        //lower than 1 due to rounding error, so try again.
    }
    //Should be extremely unlikely to happen if distribution is a valid probability distribution
    throw new IllegalArgumentException("Distribution is invalid? d="+d+", sum="+sum);
}

似乎我们得到了一个随机值。为什么我们不直接选择价值最高的索引呢?如果我想选择的不是一个,而是两个或三个最有可能的下一个字符,我应该怎么做?

【问题讨论】:

    标签: java lstm dl4j nd4j


    【解决方案1】:

    此函数采样分布,而不是简单地返回最可能的字符类。

    这也意味着您没有得到最有可能的字符,而是得到一个随机字符,其概率由给定的概率分布定义。

    首先从均匀分布 (rng.nextDouble()) 中获取一个介于 0 和 1 之间的随机值,然后找到该值在给定分布中的位置。

    你可以想象它是这样的(如果你的字母表中只有 a 到 f):

     [   a    | b |   c   |   d    | e |     f     ] 
    0.0          0.3              0.5             1.0
    

    如果绘制的随机值刚好超过 0.5,它将产生一个 e,如果它刚好小于它,它将产生一个 d

    根据其在分布中的权重,每个字母在这条线上占据一定比例的空间,介于 0 和 1 之间。

    【讨论】:

    • 我理解正确distribution[i]和distribution[i + 1]之间的差异越大,选择索引i对应的符号的概率越大?
    • 我怎样才能得到两个或更多符号,这取决于它们的概率。比如我想得到概率大于0.3的所有符号(一、二、三)?
    • Stackoverflow 并不是一个来回提问的好地方。请在 dl4j 社区委员会提出这些问题:community.konduit.ai
    猜你喜欢
    • 2019-06-05
    • 2017-09-21
    • 2022-08-15
    • 1970-01-01
    • 2015-02-23
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多