@Override public String toString() { StringBuilder sb = new StringBuilder (); for (int i = 0; i < getNgauss(); i++) { sb.append(getMean(i, 0)).append(' ').append(getVar(i, 0)).append( '\n'); } return sb.toString(); } }
/** * Saves in proprietary format * @param name name of file to save */ public void save(String name) { try { PrintWriter fout = new PrintWriter(new FileWriter(name)); fout.println(ngauss + " " + ncoefs); for (int i = 0; i < ngauss; i++) { fout.println("gauss " + i + ' ' + getWeight(i)); for (int j = 0; j < ncoefs; j++) fout.print(means[i][j] + " "); fout.println(); for (int j = 0; j < ncoefs; j++) fout.print(getVar(i, j) + " "); fout.println(); } fout.println(nT); fout.close(); } catch (IOException e) { e.printStackTrace(); } }
public void precomputeDistance() { for (int gidx = 0; gidx < ngauss; gidx++) { float fact = 0.0f; for (int i = 0; i < ncoefs; i++) { fact += logMath.linearToLog(getVar(gidx, i)); } fact += logMath.linearToLog(2.0 * Math.PI) * ncoefs; logPreComputedGaussianFactor[gidx] = fact * 0.5f; } }
public void saveHTKState(PrintWriter fout) { fout.println("<NUMMIXES> " + getNgauss()); for (int i = 1; i <= getNgauss(); i++) { fout.println("<MIXTURE> " + i + ' ' + getWeight(i - 1)); fout.println("<RCLASS> 1"); fout.println("<MEAN> " + getNcoefs()); for (int j = 0; j < getNcoefs(); j++) { fout.print(getMean(i - 1, j) + " "); } fout.println(); fout.println("<VARIANCE> " + getNcoefs()); for (int j = 0; j < getNcoefs(); j++) { fout.print(getVar(i - 1, j) + " "); } fout.println(); } }
fout.println("<VARIANCE> " + getNcoefs()); for (int j = 0; j < getNcoefs(); j++) { fout.print(getVar(i - 1, j) + " ");
/** * 2 GMMs are considered to be equal when all of their parameters do not * differ from more than 1% * @param g second gmm to compare to * @return if GMMs are equal */ public boolean isEqual(GMMDiag g) { if (getNgauss() != g.getNgauss()) return false; if (getNgauss() != g.getNcoefs()) return false; for (int i = 0; i < getNgauss(); i++) { if (isDiff(getWeight(i), g.getWeight(i))) return false; for (int j = 0; j < getNcoefs(); j++) { if (isDiff(getMean(i, j), g.getMean(i, j))) return false; if (isDiff(getVar(i, j), g.getVar(i, j))) return false; } } return true; }
public Pool<float[]> htkVars(String path, float floor) { Pool<float[]> pool = new Pool<float[]>(path); int numStates = getNumStates(); int numStreams = 1; int numGaussiansPerState = getGMMSize(); pool.setFeature(NUM_SENONES, numStates); pool.setFeature(NUM_STREAMS, numStreams); pool.setFeature(NUM_GAUSSIANS_PER_STATE, numGaussiansPerState); int ncoefs = getNcoefs(); for (int i = 0; i < numStates; i++) { GMMDiag gmm = hmmsHTK.gmms.get(i); for (int j = 0; j < numGaussiansPerState; j++) { float[] vars = new float[ncoefs]; for (int k = 0; k < ncoefs; k++) { // TODO: check: shall we put inverse vars here ? vars[k] = gmm.getVar(j, k); } Utilities.floorData(vars, varianceFloor); int id = i * numGaussiansPerState + j; // the order of the vars is the order in the HMMSet.gmms // vector which is the order of appearance in the MMF file pool.put(id, vars); } } return pool; }
public GMMDiag getMarginal(boolean[] mask) { int nc = 0; for (boolean flag : mask) if (flag) nc++; GMMDiag g = new GMMDiag(getNgauss(), nc); int curc = 0; for (int j = 0; j < ncoefs; j++) { if (mask[j]) { for (int i = 0; i < ngauss; i++) { g.setMean(i, curc, getMean(i, j)); g.setVar(i, curc, getVar(i, j)); } curc++; } } for (int i = 0; i < ngauss; i++) { g.setWeight(i, getWeight(i)); } g.precomputeDistance(); return g; }
@Override public String toString() { StringBuilder sb = new StringBuilder (); for (int i = 0; i < getNgauss(); i++) { sb.append(getMean(i, 0)).append(' ').append(getVar(i, 0)).append( '\n'); } return sb.toString(); } }
/** * Saves in proprietary format * @param name name of file to save */ public void save(String name) { try { PrintWriter fout = new PrintWriter(new FileWriter(name)); fout.println(ngauss + " " + ncoefs); for (int i = 0; i < ngauss; i++) { fout.println("gauss " + i + ' ' + getWeight(i)); for (int j = 0; j < ncoefs; j++) fout.print(means[i][j] + " "); fout.println(); for (int j = 0; j < ncoefs; j++) fout.print(getVar(i, j) + " "); fout.println(); } fout.println(nT); fout.close(); } catch (IOException e) { e.printStackTrace(); } }
public void precomputeDistance() { for (int gidx = 0; gidx < ngauss; gidx++) { float fact = 0.0f; for (int i = 0; i < ncoefs; i++) { fact += logMath.linearToLog(getVar(gidx, i)); } fact += logMath.linearToLog(2.0 * Math.PI) * ncoefs; logPreComputedGaussianFactor[gidx] = fact * 0.5f; } }
public void saveHTKState(PrintWriter fout) { fout.println("<NUMMIXES> " + getNgauss()); for (int i = 1; i <= getNgauss(); i++) { fout.println("<MIXTURE> " + i + ' ' + getWeight(i - 1)); fout.println("<RCLASS> 1"); fout.println("<MEAN> " + getNcoefs()); for (int j = 0; j < getNcoefs(); j++) { fout.print(getMean(i - 1, j) + " "); } fout.println(); fout.println("<VARIANCE> " + getNcoefs()); for (int j = 0; j < getNcoefs(); j++) { fout.print(getVar(i - 1, j) + " "); } fout.println(); } }
fout.println("<VARIANCE> " + getNcoefs()); for (int j = 0; j < getNcoefs(); j++) { fout.print(getVar(i - 1, j) + " ");
/** * 2 GMMs are considered to be equal when all of their parameters do not * differ from more than 1% * @param g second gmm to compare to * @return if GMMs are equal */ public boolean isEqual(GMMDiag g) { if (getNgauss() != g.getNgauss()) return false; if (getNgauss() != g.getNcoefs()) return false; for (int i = 0; i < getNgauss(); i++) { if (isDiff(getWeight(i), g.getWeight(i))) return false; for (int j = 0; j < getNcoefs(); j++) { if (isDiff(getMean(i, j), g.getMean(i, j))) return false; if (isDiff(getVar(i, j), g.getVar(i, j))) return false; } } return true; }
public Pool<float[]> htkVars(String path, float floor) { Pool<float[]> pool = new Pool<float[]>(path); int numStates = getNumStates(); int numStreams = 1; int numGaussiansPerState = getGMMSize(); pool.setFeature(NUM_SENONES, numStates); pool.setFeature(NUM_STREAMS, numStreams); pool.setFeature(NUM_GAUSSIANS_PER_STATE, numGaussiansPerState); int ncoefs = getNcoefs(); for (int i = 0; i < numStates; i++) { GMMDiag gmm = hmmsHTK.gmms.get(i); for (int j = 0; j < numGaussiansPerState; j++) { float[] vars = new float[ncoefs]; for (int k = 0; k < ncoefs; k++) { // TODO: check: shall we put inverse vars here ? vars[k] = gmm.getVar(j, k); } Utilities.floorData(vars, varianceFloor); int id = i * numGaussiansPerState + j; // the order of the vars is the order in the HMMSet.gmms // vector which is the order of appearance in the MMF file pool.put(id, vars); } } return pool; }
public GMMDiag getMarginal(boolean[] mask) { int nc = 0; for (boolean flag : mask) if (flag) nc++; GMMDiag g = new GMMDiag(getNgauss(), nc); int curc = 0; for (int j = 0; j < ncoefs; j++) { if (mask[j]) { for (int i = 0; i < ngauss; i++) { g.setMean(i, curc, getMean(i, j)); g.setVar(i, curc, getVar(i, j)); } curc++; } } for (int i = 0; i < ngauss; i++) { g.setWeight(i, getWeight(i)); } g.precomputeDistance(); return g; }