diff options
| -rw-r--r-- | include/gensvm_base.h | 2 | ||||
| -rw-r--r-- | src/gensvm_base.c | 1 | ||||
| -rw-r--r-- | src/gensvm_optimize.c | 12 |
3 files changed, 13 insertions, 2 deletions
diff --git a/include/gensvm_base.h b/include/gensvm_base.h index e13deb9..72371df 100644 --- a/include/gensvm_base.h +++ b/include/gensvm_base.h @@ -140,6 +140,8 @@ struct GenModel { //eigendecomposition. long max_iter; ///< maximum number of iterations of the algorithm + int status; + ///< status of the model after training }; /** diff --git a/src/gensvm_base.c b/src/gensvm_base.c index 10e4435..791cd3e 100644 --- a/src/gensvm_base.c +++ b/src/gensvm_base.c @@ -116,6 +116,7 @@ struct GenModel *gensvm_init_model() model->kernel_eigen_cutoff = 1e-8; model->max_iter = 1000000000; model->elapsed_iter = -1; + model->status = -1; model->V = NULL; model->Vbar = NULL; diff --git a/src/gensvm_optimize.c b/src/gensvm_optimize.c index b6bc164..df46ec4 100644 --- a/src/gensvm_optimize.c +++ b/src/gensvm_optimize.c @@ -104,13 +104,21 @@ void gensvm_optimize(struct GenModel *model, struct GenData *data) it++; } + // status == 0 means training was successful + model->status = 0; + // print warnings if necessary - if (L > Lbar) + if (L > Lbar) { err("[GenSVM Warning]: Negative step occurred in " "majorization.\n"); - if (it >= model->max_iter) + model->status = 1; + } + + if (it >= model->max_iter) { err("[GenSVM Warning]: maximum number of iterations " "reached.\n"); + model->status = 2; + } // print final iteration count and loss note("Optimization finished, iter = %li, loss = %15.16f, " |
