package edu.stanford.nlp.optimization;
import edu.stanford.nlp.util.logging.Redwood;
import edu.stanford.nlp.util.ConvertByteArray;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;
/**
* @author Galen Andrew
*/
public class ResultStoringFloatMonitor implements FloatFunction {
/** A logger for this class */
private static Redwood.RedwoodChannels log = Redwood.channels(ResultStoringFloatMonitor.class);
int i = 0;
final int outputFreq;
final String filename;
public ResultStoringFloatMonitor(int outputFreq, String filename) {
if (filename.lastIndexOf('.') >= 0) {
this.filename = filename.substring(0, filename.lastIndexOf('.')) + ".fdat";
} else {
this.filename = filename + ".fdat";
}
this.outputFreq = outputFreq;
}
public float valueAt(float[] x) {
if (++i % outputFreq == 0) {
log.info("Storing interim (float) weights to " + filename + " ... ");
try {
DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new GZIPOutputStream(new FileOutputStream(filename))));
ConvertByteArray.saveFloatArr(dos, x);
dos.close();
} catch (IOException e) {
log.error("!");
return 1;
}
log.info("DONE.");
}
return 0;
}
public int domainDimension() {
return 0;
}
}