def compute_super_codebook(self, feature_size):
'''
Merges the GMMs that were computed for each class
into one GMM (super codebook).
@param feature_size: dimensionality of a feature vector
'''
# Get number of classes
ncl = len(self.labels)
# Compute vocabsize per class
vocab_size_per_cl = max(1, self.vocab_size / ncl)
# Create GMM for overall repr
print >> sys.stderr, 'Using GMM with', self.vocab_size, 'and', vocab_size_per_cl , 'per class.'
self.gmm = GMM(self.vocab_size, n_iter=1, params='w', covariance_type='diag')
# Init by fitting with ones
self.gmm.fit(np.ones((self.vocab_size, feature_size)))
# Overwrite values from supervised codebook GMM by class GMMs
index = 0
for _, sgmm in self.gmms.iteritems():
vocab_size_per_cl = len(sgmm.means_)
self.gmm.means_ [index:index + vocab_size_per_cl, :] = sgmm.means_
self.gmm.covars_ [index:index + vocab_size_per_cl, :] = sgmm.covars_
index += vocab_size_per_cl
# Set uniform GMM weights
self.gmm.weights_ = np.ones(self.vocab_size) / float(self.vocab_size)
return
评论列表
文章目录