def train_one_utterance(labeled_data_event): print("Beginning training on utterance %d (%s) (%d frames)" % (utterance_num[0], labeled_data_event.name, labeled_data_event.data.shape[0])) sys.stdout.flush() label_lattice = labels_to_lattice(labeled_data_event.labels) # Build model lattice model_lattice = build_model_lattice(label_lattice, model_dict, epsilon_index) # Build training graph training_graph = TrainingGraph(model_lattice, hmm_mgr, dict()) # Train on data if gmm_mgr.get_adaptation_state() != "INITIALIZING": gmm_mgr.set_adaptation_state("INITIALIZING") hmm_mgr.set_adaptation_state("INITIALIZING") training_graph.begin_training() gmm_mgr.set_adaptation_state("ACCUMULATING") hmm_mgr.set_adaptation_state("ACCUMULATING") training_graph.train_one_sequence(labeled_data_event.data) training_graph.end_training() print("Finished training on utterance %d (%s)" % (utterance_num[0], labeled_data_event.name)) sys.stdout.flush() utterance_num[0] += 1
def test4(num_passes, num_obs): # Each of the 4 nodes contains a 4 (or 6)-node order-3 Hmm; the nodes are connected in a # diamond pattern ret = "" dimension = 2 # Data generator setup and data generation obs_gen = make_data_generator(dimension) obs_list = [obs_gen.next() for i in xrange(num_obs)] # GmmMgr setup num_models = 10 models = make_standard_gmms(dimension, num_models) gmm_mgr = GmmMgr(models) # Hmm setup # Make three Hmms with 4 (or 6) states and order 3 (self loop, forward 1, forward 2) num_states = 4 seed(0) hmm0 = make_forward_hmm(gmm_mgr, num_states, 3, exact=True) hmm1 = make_forward_hmm(gmm_mgr, num_states + 2, 3, exact=True) hmm2 = make_forward_hmm(gmm_mgr, num_states, 3, exact=True) hmm_mgr = HmmMgr((hmm0, hmm1, hmm2)) # TrainingGraph setup gb = GraphBuilder() # Note that here we are using the same HMM in two different TG nodes node_id0 = gb.new_node((0, 0)) node_id1 = gb.new_node((1, 1)) node_id2 = gb.new_node((2, 2)) node_id3 = gb.new_node((3, 0)) arc_id = gb.new_arc(node_id0, node_id1) arc_id = gb.new_arc(node_id0, node_id2) arc_id = gb.new_arc(node_id1, node_id3) arc_id = gb.new_arc(node_id2, node_id3) gr0 = FrozenGraph(gb) spd = {} spd[(0, 1)] = (0.4, 0.3, 0.8) spd[(0, 2)] = (0.6, 0.7, 0.2) tg0 = TrainingGraph(gr0, hmm_mgr, spd) # Now adapt original TrainingGraph for i in xrange(num_passes): gmm_mgr.set_adaptation_state("INITIALIZING") gmm_mgr.clear_all_accumulators() tg0.begin_training() gmm_mgr.set_adaptation_state("ACCUMULATING") for obs in obs_list: tg0.train_one_sequence(obs) tg0.end_training() gmm_mgr.set_adaptation_state("APPLYING") gmm_mgr.apply_all_accumulators() gmm_mgr.set_adaptation_state("NOT_ADAPTING") ret = tg0.to_string(full=True) return ret