def compute_presoftmax_prior_scale(dir, alidir, num_jobs, run_opts, presoftmax_prior_scale_power=-0.25): # getting the raw pdf count common_lib.execute_command( """{command} JOB=1:{num_jobs} {dir}/log/acc_pdf.JOB.log \ ali-to-post "ark:gunzip -c {alidir}/ali.JOB.gz|" ark:- \| \ post-to-tacc --per-pdf=true {alidir}/final.mdl ark:- \ {dir}/pdf_counts.JOB""".format(command=run_opts.command, num_jobs=num_jobs, dir=dir, alidir=alidir)) common_lib.execute_command( """{command} {dir}/log/sum_pdf_counts.log \ vector-sum --binary=false {dir}/pdf_counts.* {dir}/pdf_counts \ """.format(command=run_opts.command, dir=dir)) for file in glob.glob('{0}/pdf_counts.*'.format(dir)): os.remove(file) pdf_counts = common_lib.read_kaldi_matrix('{0}/pdf_counts'.format(dir))[0] scaled_counts = smooth_presoftmax_prior_scale_vector( pdf_counts, presoftmax_prior_scale_power=presoftmax_prior_scale_power, smooth=0.01) output_file = "{0}/presoftmax_prior_scale.vec".format(dir) common_lib.write_kaldi_matrix(output_file, [scaled_counts]) common_lib.force_symlink("../presoftmax_prior_scale.vec", "{0}/configs/presoftmax_prior_scale.vec".format( dir))
def get_full_config(self): ans = [] # note: each value of self.descriptors is (descriptor, dim, # normalized-string, output-string). # by 'descriptor_final_string' we mean a string that can appear in # config-files, i.e. it contains the 'final' names of nodes. descriptor_final_string = self.descriptors['input']['final-string'] input_dim = self.descriptors['input']['dim'] output_dim = self.output_dim() transform_file = self.config['affine-transform-file'] idct_mat = common_lib.compute_idct_matrix( input_dim, output_dim, self.config['cepstral-lifter']) # append a zero column to the matrix, this is the bias of the fixed # affine component for n in range(0, output_dim): idct_mat[n].append(0) common_lib.write_kaldi_matrix(transform_file, idct_mat) # write the 'real' component to final.config line = 'component name={0} type=FixedAffineComponent matrix={1}'.format( self.name, transform_file) ans.append(('final', line)) # write a random version of the component, with the same dims, to ref.config line = 'component name={0} type=FixedAffineComponent input-dim={1} output-dim={2}'.format( self.name, input_dim, output_dim) ans.append(('ref', line)) # the component-node gets written to final.config and ref.config. line = 'component-node name={0} component={0} input={1}'.format( self.name, descriptor_final_string) ans.append(('final', line)) ans.append(('ref', line)) return ans
def compute_presoftmax_prior_scale(dir, alidir, num_jobs, run_opts, presoftmax_prior_scale_power=-0.25): # getting the raw pdf count common_lib.run_job( """{command} JOB=1:{num_jobs} {dir}/log/acc_pdf.JOB.log \ ali-to-post "ark:gunzip -c {alidir}/ali.JOB.gz|" ark:- \| \ post-to-tacc --per-pdf=true {alidir}/final.mdl ark:- \ {dir}/pdf_counts.JOB""".format(command=run_opts.command, num_jobs=num_jobs, dir=dir, alidir=alidir)) common_lib.run_job( """{command} {dir}/log/sum_pdf_counts.log \ vector-sum --binary=false {dir}/pdf_counts.* {dir}/pdf_counts \ """.format(command=run_opts.command, dir=dir)) for file in glob.glob('{0}/pdf_counts.*'.format(dir)): os.remove(file) pdf_counts = common_lib.read_kaldi_matrix('{0}/pdf_counts'.format(dir))[0] scaled_counts = smooth_presoftmax_prior_scale_vector( pdf_counts, presoftmax_prior_scale_power=presoftmax_prior_scale_power, smooth=0.01) output_file = "{0}/presoftmax_prior_scale.vec".format(dir) common_lib.write_kaldi_matrix(output_file, [scaled_counts]) common_lib.force_symlink("../presoftmax_prior_scale.vec", "{0}/configs/presoftmax_prior_scale.vec".format( dir))
def get_full_config(self): ans = [] # note: each value of self.descriptors is (descriptor, dim, # normalized-string, output-string). # by 'descriptor_final_string' we mean a string that can appear in # config-files, i.e. it contains the 'final' names of nodes. descriptor_final_string = self.descriptors['input']['final-string'] input_dim = self.descriptors['input']['dim'] output_dim = self.output_dim() transform_file = self.config['affine-transform-file'] idct_mat = common_lib.compute_idct_matrix( input_dim, output_dim, self.config['cepstral-lifter']) # append a zero column to the matrix, this is the bias of the fixed # affine component for n in range(0, output_dim): idct_mat[n].append(0) common_lib.write_kaldi_matrix(transform_file, idct_mat) # write the 'real' component to final.config line = 'component name={0} type=FixedAffineComponent matrix={1}'.format( self.name, transform_file) ans.append(('final', line)) # write a random version of the component, with the same dims, to ref.config line = 'component name={0} type=FixedAffineComponent input-dim={1} output-dim={2}'.format( self.name, input_dim, output_dim) ans.append(('ref', line)) # the component-node gets written to final.config and ref.config. line = 'component-node name={0} component={0} input={1}'.format( self.name, descriptor_final_string) ans.append(('final', line)) ans.append(('ref', line)) return ans
def compute_presoftmax_prior_scale_targets(dir, counts_path, presoftmax_prior_scale_power=-0.25): # total num of frames per target already prepared target_counts = common_lib.read_kaldi_matrix(counts_path)[0] scaled_counts = smooth_presoftmax_prior_scale_vector( target_counts, presoftmax_prior_scale_power=presoftmax_prior_scale_power, smooth=0.01) output_file = "{0}/presoftmax_prior_scale.vec".format(dir) common_lib.write_kaldi_matrix(output_file, [scaled_counts]) common_lib.force_symlink("../presoftmax_prior_scale.vec", "{0}/configs/presoftmax_prior_scale.vec".format( dir))