Пример #1
0
    def sums(inputs,
             indices,
             latent_indicators,
             num_sums,
             inf_type=None,
             log=True,
             output=None):
        if indices is None:
            inputs = [inputs for _ in range(num_sums)]
        else:
            inputs = [(inputs, indices) for _ in range(num_sums)]

        # Generate a single Sums node, modeling 'num_sums' sum nodes within,
        # connecting it to inputs and latent_indicators
        s = spn.Sums(*inputs,
                     num_sums=num_sums,
                     latent_indicators=latent_indicators[-1])
        # Generate weights of the Sums node
        weights = s.generate_weights()

        # Connect the Sums nodes to a single root Sum node and generate its weights
        root = spn.Sum(s)
        root.generate_weights()

        if log:
            mpe_path_gen = spn.MPEPath(value_inference_type=inf_type, log=True)
        else:
            mpe_path_gen = spn.MPEPath(value_inference_type=inf_type,
                                       log=False)

        mpe_path_gen.get_mpe_path(root)
        path_op = [mpe_path_gen.counts[weights]]
        return spn.initialize_weights(root), path_op
Пример #2
0
    def sums(inputs,
             indices,
             latent_indicators,
             num_sums,
             inf_type,
             log=True,
             output=None):
        if indices is None:
            inputs = [inputs for _ in range(num_sums)]
        else:
            inputs = [(inputs, ind) for ind in indices]

        # Generate a single Sums node, modeling 'num_sums' sum nodes within,
        # connecting it to inputs and latent_indicators
        s = spn.Sums(*inputs,
                     num_sums=num_sums,
                     latent_indicators=latent_indicators[0])
        # Generate weights of the Sums node
        s.generate_weights()

        # Connect the Sums nodes to a single root Sum node and generate its weights
        root = spn.Sum(s)
        root.generate_weights()

        if log:
            value_op = root.get_log_value(inference_type=inf_type)
        else:
            value_op = root.get_value(inference_type=inf_type)

        return spn.initialize_weights(root), value_op