Github user iyerr3 commented on a diff in the pull request:
https://github.com/apache/madlib/pull/251#discussion_r178204767
--- Diff: src/modules/convex/mlp_igd.cpp ---
@@ -98,23 +98,28 @@ mlp_igd_transition::run(AnyType &args) {
double is_classification_double = (double) is_classification;
double activation_double = (double) activation;
- MappedColumnVector coeff =
args[10].getAs<MappedColumnVector>();
-
state.task.model.rebind(&is_classification_double,&activation_double,
- &coeff.data()[0], numberOfStages,
- &numbersOfUnits[0]);
-
- // state.task.model.is_classification =
- // static_cast<double>(is_classification);
- // state.task.model.activation =
static_cast<double>(activation);
- // MappedColumnVector initial_coeff =
args[10].getAs<MappedColumnVector>();
- // // copy initial_coeff into the model
- // Index fan_in, fan_out, layer_start = 0;
- // for (size_t k = 0; k < numberOfStages; ++k){
- // fan_in = numbersOfUnits[k];
- // fan_out = numbersOfUnits[k+1];
- // state.task.model.u[k] <<
initial_coeff.segment(layer_start, (fan_in+1)*fan_out);
- // layer_start = (fan_in + 1) * fan_out;
- // }
+ if (!args[10].isNull()){
+ // initial coefficients are provided
+ MappedColumnVector warm_start_coeff =
args[10].getAs<MappedColumnVector>();
+
+ // copy warm start into the task model
+ // state.reset() ensures algo.incrModel is copied from
task.model
+ Index layer_start = 0;
+ for (size_t k = 0; k < numberOfStages; ++k){
+ for (size_t j=0; j < state.task.model.u[k].cols();
++j){
+ for (size_t i=0; i < state.task.model.u[k].rows();
++i){
+ state.task.model.u[k](i, j) = warm_start_coeff(
+ layer_start + j *
state.task.model.u[k].rows() + i);
+ }
+ }
+ layer_start = state.task.model.u[k].rows() *
state.task.model.u[k].cols();
+ }
+ } else {
+ // initialize the model with appropriate coefficients
+ state.task.model.initialize(
--- End diff --
The comment in line 106 is actually for both the warm start copy and the
initialize. Basically `state.reset()` in line 125 is copying `task.model` to
`algo.incrModel`.
---