From 1b20a9a4a7459096e4a6222c8bf186e05952c396 Mon Sep 17 00:00:00 2001 From: Taher Rahgooy Date: Fri, 18 Aug 2017 10:28:50 -0500 Subject: [PATCH] Progress bar added to `learn` and `populate` functions --- build.sbt | 3 ++- .../cs/cogcomp/saul/classifier/Learnable.scala | 13 ++++++++++--- .../cs/cogcomp/saul/datamodel/node/Node.scala | 11 +++++++++-- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/build.sbt b/build.sbt index 3a188a46..34be1d70 100644 --- a/build.sbt +++ b/build.sbt @@ -66,7 +66,8 @@ lazy val commonSettings = Seq( "com.gurobi" % "gurobi" % "6.0", "org.apache.commons" % "commons-math3" % "3.0", "org.scalatest" % "scalatest_2.11" % "2.2.4", - "ch.qos.logback" % "logback-classic" % "1.1.7" + "ch.qos.logback" % "logback-classic" % "1.1.7", + "me.tongfei" % "progressbar" % "0.5.5" ), fork := true, connectInput in run := true, diff --git a/saul-core/src/main/scala/edu/illinois/cs/cogcomp/saul/classifier/Learnable.scala b/saul-core/src/main/scala/edu/illinois/cs/cogcomp/saul/classifier/Learnable.scala index ecb0473c..7682bfc4 100644 --- a/saul-core/src/main/scala/edu/illinois/cs/cogcomp/saul/classifier/Learnable.scala +++ b/saul-core/src/main/scala/edu/illinois/cs/cogcomp/saul/classifier/Learnable.scala @@ -24,6 +24,7 @@ import edu.illinois.cs.cogcomp.saul.lbjrelated.LBJLearnerEquivalent import edu.illinois.cs.cogcomp.saul.parser.{ IterableToLBJavaParser, LBJavaParserToIterable } import edu.illinois.cs.cogcomp.saul.test.TestReal import edu.illinois.cs.cogcomp.saul.util.Logging +import me.tongfei.progressbar.ProgressBar import scala.reflect.ClassTag @@ -226,24 +227,28 @@ abstract class Learnable[T <: AnyRef](val node: Node[T], val parameters: Paramet logger.debug(classifier.getExtractor.getCompositeChildren.toString) logger.debug(classifier.getLabeler.toString) logger.info(s"Learnable: Learn with data of size ${data.size}") - logger.info(s"Training: $iteration iterations remain.") isTraining = true + val pb = new ProgressBar("Training", iteration) + pb.start() (iteration to 1 by -1).foreach(remainingIteration => { - if (remainingIteration % 10 == 0) - logger.info(s"Training: $remainingIteration iterations remain.") node.clearPropertyCache() data.foreach(classifier.learn) + pb.step() }) + pb.stop() classifier.doneLearning() isTraining = false } def learnWithDerivedInstances(numIterations: Int, featureVectors: Iterable[FeatureVector]): Unit = { isTraining = true + val pb = new ProgressBar("Training", numIterations) + pb.start() + val propertyNameSet = feature.map(_.name).toSet (0 until numIterations).foreach { _ => featureVectors.foreach { @@ -262,7 +267,9 @@ abstract class Learnable[T <: AnyRef](val node: Node[T], val parameters: Paramet } classifier.learn(featureVector) } + pb.step() } + pb.stop() classifier.doneLearning() isTraining = false } diff --git a/saul-core/src/main/scala/edu/illinois/cs/cogcomp/saul/datamodel/node/Node.scala b/saul-core/src/main/scala/edu/illinois/cs/cogcomp/saul/datamodel/node/Node.scala index 6ba00ef9..4f922ef6 100644 --- a/saul-core/src/main/scala/edu/illinois/cs/cogcomp/saul/datamodel/node/Node.scala +++ b/saul-core/src/main/scala/edu/illinois/cs/cogcomp/saul/datamodel/node/Node.scala @@ -12,9 +12,10 @@ import edu.illinois.cs.cogcomp.saul.datamodel.edge.Edge import edu.illinois.cs.cogcomp.saul.datamodel.property.Property import edu.illinois.cs.cogcomp.saul.datamodel.property.features.discrete.DiscreteProperty import edu.illinois.cs.cogcomp.saul.util.Logging - import java.util.concurrent.atomic.AtomicInteger +import me.tongfei.progressbar.ProgressBar + import scala.collection.mutable import scala.collection.mutable.{ ArrayBuffer, ListBuffer, HashMap => MutableHashMap, LinkedHashSet => MutableSet, Map => MutableMap } import scala.reflect.ClassTag @@ -156,7 +157,13 @@ class Node[T <: AnyRef](val keyFunc: T => Any = (x: T) => x, val tag: ClassTag[T populateEdge: Boolean = true, populateJoinNodes: Boolean = true ): Unit = { - ts.foreach(addInstance(_, train, populateEdge, populateJoinNodes)) + val pb = new ProgressBar("Population", ts.size) + pb.start() + ts.foreach(i => { + addInstance(i, train, populateEdge, populateJoinNodes) + pb.step() + }) + pb.stop() } /** Relational operators */