aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGertjan van den Burg <gertjanvandenburg@gmail.com>2017-02-17 19:17:17 -0500
committerGertjan van den Burg <gertjanvandenburg@gmail.com>2017-02-17 19:17:17 -0500
commite8baad9ae430a838c34fa8173b36f92c9baa862d (patch)
tree646574b2d6ee594b600c74d1e93ae2c0fbe898b2 /src
parentBump version (diff)
downloadgensvm-e8baad9ae430a838c34fa8173b36f92c9baa862d.tar.gz
gensvm-e8baad9ae430a838c34fa8173b36f92c9baa862d.zip
allow max_iter to be set in the model
Diffstat (limited to 'src')
-rw-r--r--src/gensvm_base.c1
-rw-r--r--src/gensvm_copy.c2
-rw-r--r--src/gensvm_optimize.c11
-rw-r--r--src/gensvm_task.c6
4 files changed, 11 insertions, 9 deletions
diff --git a/src/gensvm_base.c b/src/gensvm_base.c
index 79e5f45..6bb4367 100644
--- a/src/gensvm_base.c
+++ b/src/gensvm_base.c
@@ -114,6 +114,7 @@ struct GenModel *gensvm_init_model()
model->degree = 2.0;
model->kerneltype = K_LINEAR;
model->kernel_eigen_cutoff = 1e-8;
+ model->max_iter = 1000000000;
model->V = NULL;
model->Vbar = NULL;
diff --git a/src/gensvm_copy.c b/src/gensvm_copy.c
index 28642c7..75c7e8c 100644
--- a/src/gensvm_copy.c
+++ b/src/gensvm_copy.c
@@ -48,4 +48,6 @@ void gensvm_copy_model(struct GenModel *from, struct GenModel *to)
to->gamma = from->gamma;
to->coef = from->coef;
to->degree = from->degree;
+
+ to->max_iter = from->max_iter;
}
diff --git a/src/gensvm_optimize.c b/src/gensvm_optimize.c
index 95f9df2..fff6768 100644
--- a/src/gensvm_optimize.c
+++ b/src/gensvm_optimize.c
@@ -31,13 +31,6 @@
#include "gensvm_optimize.h"
/**
- * Maximum number of iterations of the algorithm.
- */
-#ifndef GENSVM_MAX_ITER
- #define GENSVM_MAX_ITER 1000000000
-#endif
-
-/**
* Iteration frequency with which to print to stdout
*/
#ifndef GENSVM_PRINT_ITER
@@ -94,7 +87,7 @@ void gensvm_optimize(struct GenModel *model, struct GenData *data)
Lbar = L + 2.0*model->epsilon*L;
// run main loop
- while ((it < GENSVM_MAX_ITER) && (Lbar - L)/L > model->epsilon)
+ while ((it < model->max_iter) && (Lbar - L)/L > model->epsilon)
{
// ensures V contains newest V and Vbar contains V from
// previous
@@ -115,7 +108,7 @@ void gensvm_optimize(struct GenModel *model, struct GenData *data)
if (L > Lbar)
err("[GenSVM Warning]: Negative step occurred in "
"majorization.\n");
- if (it >= GENSVM_MAX_ITER)
+ if (it >= model->max_iter)
err("[GenSVM Warning]: maximum number of iterations "
"reached.\n");
diff --git a/src/gensvm_task.c b/src/gensvm_task.c
index 1526936..1112c66 100644
--- a/src/gensvm_task.c
+++ b/src/gensvm_task.c
@@ -53,6 +53,7 @@ struct GenTask *gensvm_init_task()
t->train_data = NULL;
t->test_data = NULL;
t->performance = 0.0;
+ t->max_iter = 1000000000;
return t;
}
@@ -103,6 +104,8 @@ struct GenTask *gensvm_copy_task(struct GenTask *t)
nt->coef = t->coef;
nt->degree = t->degree;
+ nt->max_iter = t->max_iter;
+
return nt;
}
@@ -130,4 +133,7 @@ void gensvm_task_to_model(struct GenTask *task, struct GenModel *model)
model->gamma = task->gamma;
model->coef = task->coef;
model->degree = task->degree;
+
+ // copy other parameters
+ model->max_iter = task->max_iter;
}