def test_JFAMachine(): # Creates a UBM weights = numpy.array([0.4, 0.6], 'float64') means = numpy.array([[1, 6, 2], [4, 3, 2]], 'float64') variances = numpy.array([[1, 2, 1], [2, 1, 2]], 'float64') ubm = GMMMachine(2,3) ubm.weights = weights ubm.means = means ubm.variances = variances # Creates a JFABase U = numpy.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]], 'float64') V = numpy.array([[6, 5], [4, 3], [2, 1], [1, 2], [3, 4], [5, 6]], 'float64') d = numpy.array([0, 1, 0, 1, 0, 1], 'float64') base = JFABase(ubm,2,2) base.u = U base.v = V base.d = d # Creates a JFAMachine y = numpy.array([1,2], 'float64') z = numpy.array([3,4,1,2,0,1], 'float64') m = JFAMachine(base) m.y = y m.z = z n_gaussians,dim,ru,rv = m.shape supervector_length = m.supervector_length assert n_gaussians == 2 assert dim == 3 assert supervector_length == 6 assert ru == 2 assert rv == 2 assert (m.y == y).all() assert (m.z == z).all() # Saves and loads filename = str(tempfile.mkstemp(".hdf5")[1]) m.save(bob.io.base.HDF5File(filename, 'w')) m_loaded = JFAMachine(bob.io.base.HDF5File(filename)) m_loaded.jfa_base = base assert m == m_loaded assert (m != m_loaded) is False assert m.is_similar_to(m_loaded) # Copy constructor mc = JFAMachine(m) assert m == mc # Variant #mv = JFAMachine() # Checks for correctness #mv.jfa_base = base #m.y = y #m.z = z #assert m.dim_c == 2 #assert m.dim_d == 3 #assert m.dim_cd == 6 #assert m.dim_ru == 2 #assert m.dim_rv == 2 #assert (m.y == y).all() #assert (m.z == z).all() # Defines GMMStats gs = GMMStats(2,3) log_likelihood = -3. T = 1 n = numpy.array([0.4, 0.6], 'float64') sumpx = numpy.array([[1., 2., 3.], [4., 5., 6.]], 'float64') sumpxx = numpy.array([[10., 20., 30.], [40., 50., 60.]], 'float64') gs.log_likelihood = log_likelihood gs.t = T gs.n = n gs.sum_px = sumpx gs.sum_pxx = sumpxx # Forward GMMStats and check estimated value of the x speaker factor eps = 1e-10 x_ref = numpy.array([0.291042849767692, 0.310273618998444], 'float64') score_ref = -2.111577181208289 score = m.log_likelihood(gs) assert numpy.allclose(m.x, x_ref, eps) assert abs(score_ref-score) < eps # x and Ux x = numpy.ndarray((2,), numpy.float64) m.estimate_x(gs, x) n_gaussians, dim,_,_ = m.shape x_py = estimate_x(n_gaussians, dim, ubm.mean_supervector, ubm.variance_supervector, U, n, sumpx) assert numpy.allclose(x, x_py, eps) ux = numpy.ndarray((6,), numpy.float64) m.estimate_ux(gs, ux) n_gaussians, dim,_,_ = m.shape ux_py = estimate_ux(n_gaussians, dim, ubm.mean_supervector, ubm.variance_supervector, U, n, sumpx) assert numpy.allclose(ux, ux_py, eps) assert numpy.allclose(m.x, x, eps) score = m.forward_ux(gs, ux) assert abs(score_ref-score) < eps # Clean-up os.unlink(filename)
from train import JFA_Base as JFABase from train import JFA_Machine as JFAMachine from train import JFA_Trainer as JFATrainer F1 = numpy.array( [0.3833, 0.4516, 0.6173, 0.2277, 0.5755, 0.8044, 0.5301, 0.9861, 0.2751, 0.0300, 0.2486, 0.5357]).reshape((6, 2)) F2 = numpy.array( [0.0871, 0.6838, 0.8021, 0.7837, 0.9891, 0.5341, 0.0669, 0.8854, 0.9394, 0.8990, 0.0182, 0.6259]).reshape((6, 2)) F = [F1, F2] N1 = numpy.array([0.1379, 0.1821, 0.2178, 0.0418]).reshape((2, 2)) N2 = numpy.array([0.1069, 0.9397, 0.6164, 0.3545]).reshape((2, 2)) N = [N1, N2] gs11 = GMMStats(2, 3) gs11.n = N1[:, 0] gs11.sum_Px = F1[:, 0].reshape(2, 3) gs12 = GMMStats(2, 3) gs12.n = N1[:, 1] gs12.sum_Px = F1[:, 1].reshape(2, 3) gs21 = GMMStats(2, 3) gs21.n = N2[:, 0] gs21.sum_Px = F2[:, 0].reshape(2, 3) gs22 = GMMStats(2, 3) gs22.n = N2[:, 1] gs22.sum_Px = F2[:, 1].reshape(2, 3) TRAINING_STATS = [ [gs11, gs12], # person 1 [gs21, gs22] # person 2