The statistics monitoring system collects comprehensive training metrics from DeepLearning4J models and provides them to the UI for visualization. It's the modern replacement for deprecated iteration listeners.
The primary iteration listener for collecting model statistics during training.
public class StatsListener extends BaseStatsListener {
// Basic constructor with default frequency (every iteration)
public StatsListener(StatsStorageRouter router);
// Constructor with custom reporting frequency
public StatsListener(StatsStorageRouter router, int listenerFrequency);
// Full configuration constructor
public StatsListener(StatsStorageRouter router,
StatsInitializationConfiguration initConfig,
StatsUpdateConfiguration updateConfig,
String sessionID, String workerID);
// Create a copy of the listener
public StatsListener clone();
// Factory methods for reports
public StatsInitializationReport getNewInitializationReport();
public StatsReport getNewStatsReport();
public StorageMetaData getNewStorageMetaData(long initTime, String sessionID, String workerID);
}Abstract base class providing common functionality for statistics listeners.
public abstract class BaseStatsListener implements IterationListener {
protected StatsStorageRouter storageRouter;
protected StatsInitializationConfiguration initConfig;
protected StatsUpdateConfiguration updateConfig;
protected String sessionID;
protected String workerID;
public BaseStatsListener(StatsStorageRouter router,
StatsInitializationConfiguration initConfig,
StatsUpdateConfiguration updateConfig,
String sessionID, String workerID);
}Java 7 compatible version of the statistics listener.
public class J7StatsListener extends BaseStatsListener {
public J7StatsListener(StatsStorageRouter router);
public J7StatsListener(StatsStorageRouter router, int listenerFrequency);
}Configuration interface for controlling statistics collection frequency and types.
public interface StatsUpdateConfiguration extends Serializable {
// Reporting frequency in terms of listener calls
int reportingFrequency();
// Performance and System Stats
boolean collectPerformanceStats();
boolean collectMemoryStats();
boolean collectGarbageCollectionStats();
// General Stats
boolean collectLearningRates();
// Histogram Configuration
boolean collectHistograms(StatsType type);
int numHistogramBins(StatsType type);
// Summary Statistics
boolean collectMean(StatsType type);
boolean collectStdev(StatsType type);
boolean collectMeanMagnitudes(StatsType type);
}Default implementation with builder pattern for easy configuration.
public class DefaultStatsUpdateConfiguration implements StatsUpdateConfiguration {
public static final int DEFAULT_REPORTING_FREQUENCY = 10;
public static class Builder {
public Builder reportingFrequency(int frequency);
public Builder collectPerformanceStats(boolean collect);
public Builder collectMemoryStats(boolean collect);
public Builder collectGarbageCollectionStats(boolean collect);
public Builder collectLearningRates(boolean collect);
// Histogram collection by type
public Builder collectHistogramsParameters(boolean collect);
public Builder collectHistogramsGradients(boolean collect);
public Builder collectHistogramsUpdates(boolean collect);
public Builder collectHistogramsActivations(boolean collect);
public Builder numHistogramBins(int bins);
// Mean collection by type
public Builder collectMeanParameters(boolean collect);
public Builder collectMeanGradients(boolean collect);
public Builder collectMeanUpdates(boolean collect);
public Builder collectMeanActivations(boolean collect);
// Standard deviation collection by type
public Builder collectStdevParameters(boolean collect);
public Builder collectStdevGradients(boolean collect);
public Builder collectStdevUpdates(boolean collect);
public Builder collectStdevActivations(boolean collect);
// Mean magnitude collection by type
public Builder collectMeanMagnitudesParameters(boolean collect);
public Builder collectMeanMagnitudesGradients(boolean collect);
public Builder collectMeanMagnitudesUpdates(boolean collect);
public Builder collectMeanMagnitudesActivations(boolean collect);
public DefaultStatsUpdateConfiguration build();
}
}Configuration interface for statistics initialization.
public interface StatsInitializationConfiguration {
boolean collectSoftwareInfo();
boolean collectHardwareInfo();
boolean collectModelInfo();
}Default implementation for initialization configuration.
public class DefaultStatsInitializationConfiguration implements StatsInitializationConfiguration {
public DefaultStatsInitializationConfiguration();
public DefaultStatsInitializationConfiguration(boolean collectSoftwareInfo,
boolean collectHardwareInfo,
boolean collectModelInfo);
}Interface for statistics reports generated during training.
public interface StatsReport extends Persistable {
void reportIterationCount(int iterationCount);
void reportIDs(String sessionID, String typeID, String workerID, long timeStamp);
void reportScore(double score);
void reportLearningRates(Map<String, Double> learningRatesByParam);
void reportHistograms(Map<StatsType, Map<String, Histogram>> histograms);
void reportMean(StatsType statsType, String paramName, double mean);
void reportStdev(StatsType statsType, String paramName, double stdev);
void reportMeanMagnitudes(StatsType statsType, String paramName, double meanMag);
}Interface for initialization reports containing model setup information.
public interface StatsInitializationReport extends Persistable {
void reportIDs(String sessionID, String typeID, String workerID, long timeStamp);
void reportSoftwareInfo(Map<String, String> softwareInfo);
void reportHardwareInfo(Map<String, String> hardwareInfo);
void reportModelInfo(String modelClassName, String modelConfigJson, String[] paramNames);
}// SBE (Simple Binary Encoding) implementations for efficiency
public class SbeStatsReport implements StatsReport {
public SbeStatsReport();
}
public class SbeStatsInitializationReport implements StatsInitializationReport {
public SbeStatsInitializationReport();
}
// Java-based implementations for compatibility
public class JavaStatsReport implements StatsReport {
public JavaStatsReport();
}
public class JavaStatsInitializationReport implements StatsInitializationReport {
public JavaStatsInitializationReport();
}public enum StatsType {
Parameters, // Model parameters (weights, biases)
Gradients, // Parameter gradients (pre-update)
Updates, // Parameter updates (post-update/processed gradients)
Activations // Layer activations
}public enum SummaryType {
Mean, // Mean values
Stdev, // Standard deviation
MeanMagnitudes // Mean magnitudes
}public interface Histogram {
double[] getBinRanges();
long[] getCounts();
String getLabel();
}import org.deeplearning4j.ui.stats.StatsListener;
import org.deeplearning4j.ui.storage.InMemoryStatsStorage;
import org.deeplearning4j.ui.api.UIServer;
// Create storage and UI server
InMemoryStatsStorage statsStorage = new InMemoryStatsStorage();
UIServer uiServer = UIServer.getInstance();
uiServer.attach(statsStorage);
// Create listener with default settings
StatsListener statsListener = new StatsListener(statsStorage);
// Attach to your model
MultiLayerNetwork model = new MultiLayerNetwork(config);
model.init();
model.setListeners(statsListener);
// Train - statistics will be collected automatically
model.fit(trainingData);import org.deeplearning4j.ui.stats.StatsListener;
import org.deeplearning4j.ui.stats.impl.DefaultStatsUpdateConfiguration;
// Create custom configuration
DefaultStatsUpdateConfiguration config = new DefaultStatsUpdateConfiguration.Builder()
.reportingFrequency(10) // Collect every 10 iterations
.collectParameterStats(true) // Collect parameter statistics
.collectActivationStats(false) // Skip activation statistics
.collectGradientStats(true) // Collect gradient statistics
.collectHistograms(true) // Collect histogram data
.build();
// Create listener with custom configuration
StatsListener statsListener = new StatsListener(statsStorage, null, config, null, null);
model.setListeners(statsListener);// Listener for detailed statistics (every iteration)
StatsListener detailedListener = new StatsListener(detailedStorage, 1);
// Listener for summary statistics (every 100 iterations)
StatsListener summaryListener = new StatsListener(summaryStorage, 100);
// Attach both listeners
model.setListeners(detailedListener, summaryListener);// Create base listener configuration
StatsListener baseListener = new StatsListener(statsStorage, customConfig, null, null);
// Clone for multiple models
StatsListener model1Listener = baseListener.clone();
StatsListener model2Listener = baseListener.clone();
model1.setListeners(model1Listener);
model2.setListeners(model2Listener);The following listeners are deprecated but still part of the API for compatibility:
@Deprecated
public class HistogramIterationListener extends StatsListener {
public HistogramIterationListener(int iterations);
public HistogramIterationListener(int iterations, boolean openBrowser);
public HistogramIterationListener(StatsStorage ssr, int iterations, boolean openBrowser);
}@Deprecated
public class FlowIterationListener implements IterationListener {
public FlowIterationListener();
public FlowIterationListener(int iterations);
public FlowIterationListener(StatsStorage statsStorage, int iterations);
}@Deprecated
public class ConvolutionalIterationListener extends StatsListener {
public ConvolutionalIterationListener(int iterations);
public ConvolutionalIterationListener(int iterations, boolean openBrowser);
}Migration Note: Use StatsListener instead of these deprecated classes. The new StatsListener provides all functionality with better performance and more configuration options.