@Test
public void testListenerSerialization() throws Exception {
//Note: not all listeners are (or should be) serializable. But some should be - for Spark etc
List<TrainingListener> listeners = new ArrayList<>();
listeners.add(new ScoreIterationListener());
listeners.add(new PerformanceListener(1, true, true));
listeners.add(new TimeIterationListener(10000));
listeners.add(new ComposableIterationListener(new ScoreIterationListener(), new PerformanceListener(1, true, true)));
listeners.add(new CheckpointListener.Builder(tempDir.newFolder()).keepAll().saveEveryNIterations(3).build()); //Doesn't usually need to be serialized, but no reason it can't be...
DataSetIterator iter = new IrisDataSetIterator(10, 150);
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
.list()
.layer(new OutputLayer.Builder().nIn(4).nOut(3)
.activation(Activation.SOFTMAX)
.lossFunction(LossFunctions.LossFunction.MCXENT).build())
.build();
MultiLayerNetwork net = new MultiLayerNetwork(conf);
net.init();
net.setListeners(listeners);
net.fit(iter);
List<TrainingListener> listeners2 = new ArrayList<>();
for(TrainingListener il : listeners){
log.info("------------------");
log.info("Testing listener: {}", il);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(il);
byte[] bytes = baos.toByteArray();
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes));
TrainingListener il2 = (TrainingListener) ois.readObject();
listeners2.add(il2);
}
net.setListeners(listeners2);
net.fit(iter);
}