jeffheaton / encog-java-core

http://www.heatonresearch.com/encog
Other
742 stars 268 forks source link

Workbench: Iteration axis #36

Closed PetrToman closed 12 years ago

PetrToman commented 12 years ago

When the current error and error improvement are plot during the training, the x-axis shows only a couple of recent iterations (130-290, for example), which does not provide a really good overview of how the training error has evolved since the start.

It would be more convenient to show iterations from 1 up to the current one. Or, there could be an option or checkbox for switching these two views in realtime.

seemasingh commented 12 years ago

A few weeks ago I added a "history count" on the config options to the workbench. This allows you to change the history range tracked. I now made it allow a -1 value to specify infinite tracking. Not sure if there is an upper limit on how much it will track, could not see where JFreeChart allows any sort of "thinning", but I just trained something to several million iterations, without issue.

PetrToman commented 12 years ago

Cool. Thank you :-)

PetrToman commented 12 years ago

I found a bug: if "Training Chart History" is set to -1, the following exception is thrown when SVMSearch training is used:

Exception: java.lang.IndexOutOfBoundsException: toIndex = 1 java.util.SubList.(Unknown Source) java.util.RandomAccessSubList.(Unknown Source) java.util.AbstractList.subList(Unknown Source) org.jfree.data.xy.XYSeries.setMaximumItemCount(XYSeries.java:385) org.encog.workbench.tabs.training.ChartPane.(ChartPane.java:121) org.encog.workbench.tabs.training.BasicTrainingProgress.(BasicTrainingProgress.java:277) org.encog.workbench.process.TrainBasicNetwork.startup(TrainBasicNetwork.java:680) org.encog.workbench.process.TrainBasicNetwork.performSVMSearch(TrainBasicNetwork.java:587) org.encog.workbench.process.TrainBasicNetwork.performSVM(TrainBasicNetwork.java:541) org.encog.workbench.process.TrainBasicNetwork.performMethodTrain(TrainBasicNetwork.java:186) org.encog.workbench.process.TrainBasicNetwork.performTrain(TrainBasicNetwork.java:257) org.encog.workbench.tabs.mlmethod.MLMethodTab.performTrain(MLMethodTab.java:158) org.encog.workbench.tabs.mlmethod.MLMethodTab.actionPerformed(MLMethodTab.java:143) javax.swing.AbstractButton.fireActionPerformed(Unknown Source) javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) javax.swing.DefaultButtonModel.setPressed(Unknown Source) javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) java.awt.Component.processMouseEvent(Unknown Source) javax.swing.JComponent.processMouseEvent(Unknown Source) java.awt.Component.processEvent(Unknown Source) java.awt.Container.processEvent(Unknown Source) java.awt.Component.dispatchEventImpl(Unknown Source) java.awt.Container.dispatchEventImpl(Unknown Source) java.awt.Component.dispatchEvent(Unknown Source) java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) java.awt.Container.dispatchEventImpl(Unknown Source) java.awt.Window.dispatchEventImpl(Unknown Source) java.awt.Component.dispatchEvent(Unknown Source) java.awt.EventQueue.dispatchEventImpl(Unknown Source) java.awt.EventQueue.access$000(Unknown Source) java.awt.EventQueue$1.run(Unknown Source) java.awt.EventQueue$1.run(Unknown Source) java.security.AccessController.doPrivileged(Native Method) java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) java.awt.EventQueue$2.run(Unknown Source) java.awt.EventQueue$2.run(Unknown Source) java.security.AccessController.doPrivileged(Native Method) java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) java.awt.EventQueue.dispatchEvent(Unknown Source) java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) java.awt.EventDispatchThread.pumpEvents(Unknown Source) java.awt.EventDispatchThread.pumpEvents(Unknown Source) java.awt.EventDispatchThread.run(Unknown Source)

PetrToman commented 12 years ago

This can be fixed by replacing line 124:

this.series2.setMaximumItemCount(historySize);

by

if( historySize >0 ) {
   this.series2.setMaximumItemCount(Math.min(historySize,100));
}
seemasingh commented 12 years ago

Okay added the code.