def test_edge_type_graph_crf_energy_lp_relaxed(): # same test as for graph crf above, using single edge type crf = EdgeTypeGraphCRF(n_states=2, inference_method="lp", n_edge_types=1) for i in xrange(10): w_ = np.random.uniform(size=w_sym.shape) inf_res, energy_lp = crf.inference((x_1, [g_1]), w_, relaxed=True, return_energy=True) assert_almost_equal(energy_lp, -np.dot(w_, crf.psi((x_1, [g_1]), inf_res))) # now with fractional solution x = np.array([[0, 0], [0, 0], [0, 0]]) inf_res, energy_lp = crf.inference((x, [g_1]), w_sym, relaxed=True, return_energy=True) assert_almost_equal(energy_lp, -np.dot(w_sym, crf.psi((x, [g_1]), inf_res)))
def test_edge_type_graph_crf_energy_lp_integral(): # same test as for graph crf above, using single edge type crf = EdgeTypeGraphCRF(n_states=2, inference_method="lp", n_edge_types=1) inf_res, energy_lp = crf.inference((x_1, [g_1]), w_sym, relaxed=True, return_energy=True) # integral solution assert_array_almost_equal(np.max(inf_res[0], axis=-1), 1) y = np.argmax(inf_res[0], axis=-1) # energy and psi check out assert_almost_equal(energy_lp, -np.dot(w_sym, crf.psi((x_1, [g_1]), y)))