예제 #1
0
    def test_uncompress_batch(self):
        compressed = utils.compress_batch(self.inp, self.inp_mask)
        lens = utils.seg_len_info(self.inp_mask)

        answer = np.array([[[0, 1], [0, 1], [4, 5], [6, 7]],
                           [[8, 9], [8, 9], [8, 9], [14, 15]]])

        self.assertTrue(
            np.allclose(utils.uncompress_batch(compressed, lens), answer))
예제 #2
0
 def testCompressBatch(self):
     compressed = utils.compress_batch(self.inp, self.inp_mask)
     #        padded = utils.pad_batch(compressed)
     answer = [
         np.array([[0, 1], [4, 5], [6, 7]]),
         np.array([[8, 9], [14, 15], [0, 0]])
     ]
     self.assertTrue(
         all([np.allclose(x, y) for x, y in zip(compressed, answer)]))
예제 #3
0
def eval_net_compress(predict_fn,
                      data_stream,
                      hmrnn,
                      batch_size,
                      use_ivectors=False):
    data_iterator = data_stream.get_epoch_iterator()

    total_ce_sum = 0.
    total_ce_frame_count = 0
    total_accuracy_sum = 0
    total_frame_count = 0

    for b_idx, data in enumerate(data_iterator, start=1):
        input_data, input_mask, ivector_data, ivector_mask, target_data, target_mask = data
        n_batch, _, _ = input_data.shape
        if n_batch != batch_size:
            continue

        hmrnn.reset()
        z_1_3d = hmrnn.compute_z_1_3d(input_data)
        compressed_batch = [compress_batch(src, z_1_3d) for src in data]
        len_info = seg_len_info(z_1_3d)

        if use_ivectors:
            predict_output = predict_fn(*compressed_batch)
        else:
            predict_output = predict_fn(compressed_batch[0],
                                        compressed_batch[1],
                                        compressed_batch[4],
                                        compressed_batch[5])

        ce_frame_sum, pred_idx = predict_output
        pred_idx = uncompress_batch(pred_idx, len_info)

        match_data = (target_data == pred_idx) * target_mask

        total_ce_sum += ce_frame_sum
        total_ce_frame_count += compressed_batch[-1].sum()

        total_accuracy_sum += match_data.sum()
        total_frame_count += target_mask.sum()

    avg_ce = total_ce_sum / total_ce_frame_count
    avg_fer = 1.0 - (total_accuracy_sum / total_frame_count)

    return avg_ce, avg_fer
예제 #4
0
    tparams = init_tparams_with_restored_value(tparams, args.model)

    print('Loading data streams from {}'.format(args.data_path))
    sync_data(args)

    ds = create_ivector_datastream(args.data_path, args.dataset,
                                   args.batch_size)

    epoch_sw = StopWatch()
    status_sw = StopWatch()

    status_sw.reset()
    z_1_3d_list = []

    for b_idx, batch in enumerate(ds.get_epoch_iterator(), start=1):
        reset_state(states)

        input_data, input_mask, ivector_data, ivector_mask, target_data, target_mask = batch
        n_batch, n_seq, n_feat = input_data.shape
        if n_batch < args.batch_size:
            continue

        input_data_trans = numpy.transpose(input_data, (1, 0, 2))
        _, _, _, z_1_3d, _ = f_debug(input_data_trans)

        z_1_3d_trans = numpy.transpose(z_1_3d, (1, 0))
        compressed_input_data = compress_batch(input_data, z_1_3d_trans)
        compressed_input_mask = compress_batch(input_mask, z_1_3d_trans)
        compressed_target_data = compress_batch(target_data, z_1_3d_trans)
        compressed_target_mask = compress_batch(target_mask, z_1_3d_trans)
예제 #5
0
    for batch_idx, (feat_batch, uttid_batch) in enumerate(
            zip(test_ds.get_epoch_iterator(),
                uttid_stream.get_epoch_iterator())):
        input_data, input_mask, ivector_data, ivector_mask = feat_batch

        n_batch, n_seq, n_feat = input_data.shape
        if n_batch != args.batch_size:
            continue

        uttid_batch, = uttid_batch
        feat_lens = input_mask.sum(axis=1)

        hmrnn.reset()
        z_1_3d = hmrnn.compute_z_1_3d(input_data)
        compressed_batch = [compress_batch(src, z_1_3d) for src in feat_batch]
        len_info = seg_len_info(z_1_3d)

        comp_input_mask = compressed_batch[1]
        comp_feat_lens = comp_input_mask.sum(axis=1)

        orig_len += sum(feat_lens)
        compressed_len += sum(comp_feat_lens)

        if args.use_ivector_input:
            net_output, = ff_fn(*compressed_batch[:3])
        else:
            net_output, = ff_fn(*compressed_batch[:2])

        net_output = uncompress_batch(net_output, len_info)
예제 #6
0
        print('Epoch {} starts'.format(e_idx))
        print('--')

        total_ce_sum = 0.0
        total_frame_count = 0
        status_sw = StopWatch()

        for b_idx, data in enumerate(train_ds.get_epoch_iterator(), start=1):
            input_data, input_mask, ivector_data, ivector_mask, target_data, target_mask = data
            n_batch, _, _ = input_data.shape
            if n_batch != args.batch_size:
                continue

            hmrnn.reset()
            z_1_3d = hmrnn.compute_z_1_3d(input_data)
            compressed_batch = [compress_batch(src, z_1_3d) for src in data]
            len_info = seg_len_info(z_1_3d)

            if args.use_ivector_input:
                train_output = training_fn(*compressed_batch)
            else:
                train_output = training_fn(compressed_batch[0],
                                           compressed_batch[1],
                                           compressed_batch[4],
                                           compressed_batch[5])

            ce_frame_sum, network_grads_norm = train_output
            total_ce_sum += ce_frame_sum
            total_frame_count += compressed_batch[-1].sum()

            if b_idx % args.log_freq == 0: