Example #1
0
    def test_on_batch(self, inputs, outputs, verbose=0):
        """

        :param inputs:
        :param outputs:
        :param verbose:
        :return:
        """
        grapheme_root = Tensor(outputs[0])
        vowel_diacritic = Tensor(outputs[1])
        consonant_diacritic = Tensor(outputs[2])

        _, grapheme_root_tru = grapheme_root.max(1)
        _, vowel_diacritic_tru = vowel_diacritic.max(1)
        _, consonant_diacritic_tru = consonant_diacritic.max(1)

        grapheme_root_hat, vowel_diacritic_hat, consonant_diacritic_hat = self.predict(inputs)
        grapheme_root_hat = grapheme_root_hat.cpu()
        vowel_diacritic_hat = vowel_diacritic_hat.cpu()
        consonant_diacritic_hat = consonant_diacritic_hat.cpu()

        if verbose == 1:
            print(grapheme_root_tru[:10])
            print(grapheme_root_hat[:10])
            print(vowel_diacritic_tru[:10])
            print(vowel_diacritic_hat[:10])
            print(consonant_diacritic_tru[:10])
            print(consonant_diacritic_hat[:10])

        grapheme_root = accuracy_score(grapheme_root_tru, grapheme_root_hat)
        vowel_diacritic = accuracy_score(vowel_diacritic_tru, vowel_diacritic_hat)
        consonant_diacritic = accuracy_score(consonant_diacritic_tru, consonant_diacritic_hat)

        print("accuracy: grapheme root {}, vowel diacritic {}, consonant diacritic {}".format(grapheme_root, vowel_diacritic, consonant_diacritic))
def logsumexp(x: Tensor, dim: int) -> Tensor:
    """
    Args:
        x: A pytorch tensor (any dimension will do)
        dim: int, over which to perform the summation.

    Returns: The result of the log(sum(exp(...))) operation.
    """
    xmax, _ = x.max(dim, keepdim=True)
    xmax_, _ = x.max(dim)
    return xmax_ + torch.log(torch.exp(x - xmax).sum(dim))