示例#1
0
        private Pool <ISenone> CreateTiedSenonePool(float distFloor, float varianceFloor)
        {
            var pool = new Pool <ISenone>("senones");

            var numMeans             = MeansPool.Size;
            var numVariances         = VariancePool.Size;
            var numGaussiansPerState = MixtureWeightsPool.GauPerState;
            var numSenones           = MixtureWeightsPool.StatesNum;
            var numStreams           = MixtureWeightsPool.StreamsNum;

            this.LogInfo("Senones " + numSenones);
            this.LogInfo("Gaussians Per State " + numGaussiansPerState);
            this.LogInfo("Means " + numMeans);
            this.LogInfo("Variances " + numVariances);

            Debug.Assert(numGaussiansPerState > 0);
            Debug.Assert(numVariances == _numBase * numGaussiansPerState * numStreams);
            Debug.Assert(numMeans == _numBase * numGaussiansPerState * numStreams);

            var meansTransformationMatrix = MeansTransformationMatrixPool == null ? null
                    : MeansTransformationMatrixPool.Get(0);
            var meansTransformationVector = MeansTransformationVectorPool == null ? null
                    : MeansTransformationVectorPool.Get(0);
            var varianceTransformationMatrix = VarianceTransformationMatrixPool == null ? null
                    : VarianceTransformationMatrixPool.Get(0);
            var varianceTransformationVector = VarianceTransformationVectorPool == null ? null
                    : VarianceTransformationVectorPool.Get(0);

            _phoneticTiedMixtures = new MixtureComponentSet[_numBase];
            for (var i = 0; i < _numBase; i++)
            {
                var mixtureComponents = new List <PrunableMixtureComponent[]>();
                for (var j = 0; j < numStreams; j++)
                {
                    var featMixtureComponents = new PrunableMixtureComponent[numGaussiansPerState];
                    for (var k = 0; k < numGaussiansPerState; k++)
                    {
                        var whichGaussian = i * numGaussiansPerState * numStreams + j * numGaussiansPerState + k;
                        featMixtureComponents[k] = new PrunableMixtureComponent(
                            MeansPool.Get(whichGaussian),
                            meansTransformationMatrix, meansTransformationVector,
                            VariancePool.Get(whichGaussian),
                            varianceTransformationMatrix,
                            varianceTransformationVector, distFloor, varianceFloor, k);
                    }
                    mixtureComponents.Add(featMixtureComponents);
                }
                _phoneticTiedMixtures[i] = new MixtureComponentSet(mixtureComponents, _topGauNum);
            }

            for (var i = 0; i < numSenones; i++)
            {
                ISenone senone = new SetBasedGaussianMixture(MixtureWeightsPool, _phoneticTiedMixtures[Senone2Ci[i]], i);
                pool.Put(i, senone);
            }
            return(pool);
        }
示例#2
0
        public virtual void clearGauScores()
        {
            if (this.phoneticTiedMixtures == null)
            {
                return;
            }
            MixtureComponentSet[] array = this.phoneticTiedMixtures;
            int num = array.Length;

            for (int i = 0; i < num; i++)
            {
                MixtureComponentSet mixtureComponentSet = array[i];
                mixtureComponentSet.clearStoredScores();
            }
        }
示例#3
0
        public virtual void setGauScoresQueueLength(int scoresQueueLen)
        {
            if (this.phoneticTiedMixtures == null)
            {
                return;
            }
            MixtureComponentSet[] array = this.phoneticTiedMixtures;
            int num = array.Length;

            for (int i = 0; i < num; i++)
            {
                MixtureComponentSet mixtureComponentSet = array[i];
                mixtureComponentSet.setScoreQueueLength(scoresQueueLen);
            }
        }