/** * The function for the users to call for the structured SVM * * @param struct_finder * The inference solver (dynamic programming, ILP,...). Given an * input (IInstance) and a Weight vector (WeightVector), return * the best structure (AbstractStructures) * @param sp * Structured Labeled Dataset * @param para * parameters for JLIS * @return * @throws Exception */ @Override public WeightVector trainStructuredSVM( final AbstractLossSensitiveStructureFinder struct_finder, final StructuredProblem sp, JLISParameters para) throws Exception { WeightVector wv = new WeightVector(para.total_number_features + 1); // +1 // because // we // skip // wv.u[0] //wv.setExtendable(false); return getJointWeightVectorFast(wv, struct_finder, sp, empty_b, para); }
public WeightVector parallelTrainLatentStructuredSVMWithInitStructures_old( final AbstractLatentLossSensitiveStructureFinder[] struct_finder_list, final StructuredProblem sp, final JLISParameters para) throws Exception { WeightVector wv = new WeightVector(para.total_number_features + 1); // +1 for (int i = 0; i < para.MAX_OUT_ITER; i++) { wv = multiThreadGetJointWeightVector(wv, struct_finder_list, sp, empty_b, para); for (int j = 0; j < sp.size(); j++) { IStructure newLatentStructureWithSameOutputStructure = struct_finder_list[0] .getBestLatentStructure(wv, sp.input_list.get(j), sp.output_list.get(j)); sp.output_list .set(j, newLatentStructureWithSameOutputStructure); } } return wv; }
public static WeightVector getWeightVectorBySumAlpahFv( L2LossInstanceWithAlphas[] alpha_ins_list, boolean is_extendable, int n_ex, int verbose_level) { int max_n = -1; for (int i = 0; i < n_ex; i++) { int cur_idx = alpha_ins_list[i].getMaxIdx(); if (cur_idx > max_n) max_n = cur_idx; } if (verbose_level >= JLISParameters.VLEVEL_MID) System.out.println("number of features: " + max_n); WeightVector cur_wv = new WeightVector(max_n + 1); cur_wv.setExtendable(is_extendable); // double[] cur_w = new double[max_n + 1]; for (int i = 0; i < n_ex; i++) { alpha_ins_list[i].fillWeightVector(cur_wv); } return cur_wv; }
final StructuredProblem sp, JLISParameters para) throws Exception { WeightVector wv = new WeightVector(10000);
protected WeightVector multiThreadGetJointWeightVector(WeightVector old_wv, final AbstractStructureFinder[] struct_finder_list, StructuredProblem sp, BinaryProblem bp, JLISParameters para) throws Exception { int struct_size = sp.size(); int binary_size = bp.size(); int total_size = struct_size + binary_size; System.out.println("Number of traing data: #struct: " + struct_size + " #binary: " + binary_size); WeightVector new_wv = new WeightVector(old_wv, 0); // allocate bias term // for indirect // supervision L2LossInstanceWithAlphas[] alpha_ins_list = initArrayOfInstances(sp, bp, para.c_struct, para.c_binary, struct_size, total_size); return multitreadTrainJLIS(struct_finder_list, para.MAX_OUT_ITER, struct_size, total_size, new_wv, alpha_ins_list, para) .getFirst(); }
L2LossInstanceWithAlphas.setJLISParameters(para); WeightVector wv = new WeightVector(para.total_number_features + 1); // +1 WeightVector new_wv = new WeightVector(wv, 0); new_wv.setExtendable(wv.isExtendable());
+ " #binary: " + binary_size); WeightVector new_wv = new WeightVector(old_wv, 0); // allocate bias term