コード例 #1
0
        protected internal void accumulate(int num, TrainerScore[] array, TrainerScore[] array2)
        {
            TrainerScore trainerScore = array[num];

            this.currentLogLikelihood = 0f;
            this.logLikelihood       -= array[0].getScalingFactor();
            SenoneHMMState senoneHMMState = (SenoneHMMState)trainerScore.getState();

            if (senoneHMMState == null)
            {
                int num2 = trainerScore.getSenoneID();
                if (num2 == -1)
                {
                    this.accumulateMean(num2, array[num]);
                    this.accumulateVariance(num2, array[num]);
                    this.accumulateMixture(num2, array[num]);
                    this.accumulateTransition(num2, num, array, array2);
                }
            }
            else if (senoneHMMState.isEmitting())
            {
                int num2 = this.senonePool.indexOf(senoneHMMState.getSenone());
                this.accumulateMixture(num2, array[num]);
                this.accumulateTransition(num2, num, array, array2);
            }
        }
コード例 #2
0
 private void accumulateMixture(int num, TrainerScore trainerScore)
 {
     if (num == -1)
     {
         for (int i = 0; i < this.senonePool.size(); i++)
         {
             this.accumulateMixture(i, trainerScore);
         }
     }
     else
     {
         Buffer buffer = (Buffer)this.mixtureWeightsBufferPool.get(num);
         for (int j = 0; j < this.mixtureWeights.getGauPerState(); j++)
         {
             float num2 = trainerScore.getComponentGamma()[j];
             num2 -= this.currentLogLikelihood;
             buffer.logAccumulate(num2, j, this.logMath);
         }
     }
 }
コード例 #3
0
 private void accumulateMean(int num, TrainerScore trainerScore)
 {
     if (num == -1)
     {
         for (int i = 0; i < this.senonePool.size(); i++)
         {
             this.accumulateMean(i, trainerScore);
         }
     }
     else
     {
         GaussianMixture    gaussianMixture   = (GaussianMixture)this.senonePool.get(num);
         MixtureComponent[] mixtureComponents = gaussianMixture.getMixtureComponents();
         for (int j = 0; j < mixtureComponents.Length; j++)
         {
             float[] mean = mixtureComponents[j].getMean();
             int     num2 = ((Integer)this.indexMap.get(mean)).intValue();
             if (!HMMPoolManager.assertionsDisabled && num2 < 0)
             {
                 throw new AssertionError();
             }
             if (!HMMPoolManager.assertionsDisabled && num2 != num)
             {
                 throw new AssertionError();
             }
             Buffer   buffer = (Buffer)this.meansBufferPool.get(num2);
             float[]  values = ((FloatData)trainerScore.getData()).getValues();
             double[] array  = new double[values.Length];
             float    num3   = trainerScore.getComponentGamma()[j];
             num3 -= this.currentLogLikelihood;
             double num4 = this.logMath.logToLinear(num3);
             for (int k = 0; k < array.Length; k++)
             {
                 array[k] = (double)values[k] * num4;
             }
             buffer.accumulate(array, num4);
         }
     }
 }
コード例 #4
0
 private void accumulateVariance(int num, TrainerScore trainerScore)
 {
     if (num == -1)
     {
         for (int i = 0; i < this.senonePool.size(); i++)
         {
             this.accumulateVariance(i, trainerScore);
         }
     }
     else
     {
         GaussianMixture    gaussianMixture   = (GaussianMixture)this.senonePool.get(num);
         MixtureComponent[] mixtureComponents = gaussianMixture.getMixtureComponents();
         for (int j = 0; j < mixtureComponents.Length; j++)
         {
             float[]  mean     = mixtureComponents[j].getMean();
             float[]  variance = mixtureComponents[j].getVariance();
             int      id       = ((Integer)this.indexMap.get(variance)).intValue();
             Buffer   buffer   = (Buffer)this.varianceBufferPool.get(id);
             float[]  values   = ((FloatData)trainerScore.getData()).getValues();
             double[] array    = new double[values.Length];
             float    num2     = trainerScore.getComponentGamma()[j];
             num2 -= this.currentLogLikelihood;
             double num3 = this.logMath.logToLinear(num2);
             for (int k = 0; k < array.Length; k++)
             {
                 array[k] = (double)(values[k] - mean[k]);
                 double[] array2 = array;
                 int      num4   = k;
                 double[] array3 = array2;
                 array3[num4] *= array[k] * num3;
             }
             buffer.accumulate(array, num3);
         }
     }
 }