当前位置: 首页>>代码示例>>C++>>正文


C++ CTime::time_diff_sec方法代码示例

本文整理汇总了C++中CTime::time_diff_sec方法的典型用法代码示例。如果您正苦于以下问题:C++ CTime::time_diff_sec方法的具体用法?C++ CTime::time_diff_sec怎么用?C++ CTime::time_diff_sec使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CTime的用法示例。


在下文中一共展示了CTime::time_diff_sec方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: train


//.........这里部分代码省略.........
    float64_t obj=0;
    delta_active=num_vec;
    last_it_noimprovement=-1;

    work_epsilon=0.99;
    autoselected_epsilon=work_epsilon;

    compute_projection(num_feat, num_vec);

    CTime time;
    float64_t loop_time=0;
    while (!(CSignal::cancel_computations()))
    {
        CTime t;
        delta_active=find_active(num_feat, num_vec, num_active, num_bound);

        update_active(num_feat, num_vec);

#ifdef DEBUG_SUBGRADIENTLPM
        SG_PRINT("==================================================\niteration: %d ", num_iterations);
        obj=compute_objective(num_feat, num_vec);
        SG_PRINT("objective:%.10f alpha: %.10f dir_deriv: %f num_bound: %d num_active: %d work_eps: %10.10f eps: %10.10f auto_eps: %10.10f time:%f\n",
                obj, alpha, dir_deriv, num_bound, num_active, work_epsilon, epsilon, autoselected_epsilon, loop_time);
#else
      SG_ABS_PROGRESS(work_epsilon, -CMath::log10(work_epsilon), -CMath::log10(0.99999999), -CMath::log10(epsilon), 6);
#endif
        //CMath::display_vector(w, w_dim, "w");
        //SG_PRINT("bias: %f\n", bias);
        //CMath::display_vector(proj, num_vec, "proj");
        //CMath::display_vector(idx_active, num_active, "idx_active");
        //SG_PRINT("num_active: %d\n", num_active);
        //CMath::display_vector(idx_bound, num_bound, "idx_bound");
        //SG_PRINT("num_bound: %d\n", num_bound);
        //CMath::display_vector(sum_CXy_active, num_feat, "sum_CXy_active");
        //SG_PRINT("sum_Cy_active: %f\n", sum_Cy_active);
        //CMath::display_vector(grad_w, num_feat, "grad_w");
        //SG_PRINT("grad_b:%f\n", grad_b);
        
        dir_deriv=compute_min_subgradient(num_feat, num_vec, num_active, num_bound);

        alpha=line_search(num_feat, num_vec);

        if (num_it_noimprovement==10 || num_bound<qpsize_max)
        {
            float64_t norm_grad=CMath::dot(grad_w, grad_w, num_feat) +
                grad_b*grad_b;

            SG_PRINT("CHECKING OPTIMALITY CONDITIONS: "
                    "work_epsilon: %10.10f delta_active:%d alpha: %10.10f norm_grad: %10.10f a*norm_grad:%10.16f\n",
                    work_epsilon, delta_active, alpha, norm_grad, CMath::abs(alpha*norm_grad));

            if (work_epsilon<=epsilon && delta_active==0 && CMath::abs(alpha*norm_grad)<1e-6)
                break;
            else
                num_it_noimprovement=0;
        }

        //if (work_epsilon<=epsilon && delta_active==0 && num_it_noimprovement)
        if ((dir_deriv<0 || alpha==0) && (work_epsilon<=epsilon && delta_active==0))
        {
            if (last_it_noimprovement==num_iterations-1)
            {
                SG_PRINT("no improvement...\n");
                num_it_noimprovement++;
            }
            else
                num_it_noimprovement=0;

            last_it_noimprovement=num_iterations;
        }

        CMath::vec1_plus_scalar_times_vec2(w, -alpha, grad_w, num_feat);
        bias-=alpha*grad_b;

        update_projection(alpha, num_vec);

        t.stop();
        loop_time=t.time_diff_sec();
        num_iterations++;

        if (get_max_train_time()>0 && time.cur_time_diff()>get_max_train_time())
            break;
    }

    SG_INFO("converged after %d iterations\n", num_iterations);

    obj=compute_objective(num_feat, num_vec);
    SG_INFO("objective: %f alpha: %f dir_deriv: %f num_bound: %d num_active: %d\n",
            obj, alpha, dir_deriv, num_bound, num_active);

#ifdef DEBUG_SUBGRADIENTLPM
    CMath::display_vector(w, w_dim, "w");
    SG_PRINT("bias: %f\n", bias);
#endif
    SG_PRINT("solver time:%f s\n", lpmtim);

    cleanup();

    return true;
}
开发者ID:AsherBond,项目名称:shogun,代码行数:101,代码来源:SubGradientLPM.cpp

示例2: compute_min_subgradient

float64_t CSubGradientSVM::compute_min_subgradient(
    int32_t num_feat, int32_t num_vec, int32_t num_active, int32_t num_bound)
{
    float64_t dir_deriv=0;

    if (num_bound > 0)
    {

        CTime t2;
        CMath::add(v, 1.0, w, -1.0, sum_CXy_active, num_feat);

        if (num_bound>=qpsize_max && num_it_noimprovement!=10) // if qp gets to large, lets just choose a random beta
        {
            //SG_PRINT("qpsize too large  (%d>=%d) choosing random subgradient/beta\n", num_bound, qpsize_max);
            for (int32_t i=0; i<num_bound; i++)
                beta[i]=CMath::random(0.0,1.0);
        }
        else
        {
            memset(beta, 0, sizeof(float64_t)*num_bound);

            float64_t bias_const=0;

            if (use_bias)
                bias_const=1;

            for (int32_t i=0; i<num_bound; i++)
            {
                for (int32_t j=i; j<num_bound; j++)
                {
                    Z[i*num_bound+j]= 2.0*C1*C1*get_label(idx_bound[i])*get_label(idx_bound[j])* 
                        (features->dot(idx_bound[i], features, idx_bound[j]) + bias_const);

                    Z[j*num_bound+i]=Z[i*num_bound+j];

                }

                Zv[i]=-2.0*C1*get_label(idx_bound[i])* 
                    (features->dense_dot(idx_bound[i], v, num_feat)-sum_Cy_active);
            }

            //CMath::display_matrix(Z, num_bound, num_bound, "Z");
            //CMath::display_vector(Zv, num_bound, "Zv");
            t2.stop();
#ifdef DEBUG_SUBGRADIENTSVM
            t2.time_diff_sec(true);
#endif

            CTime t;
            CQPBSVMLib solver(Z,num_bound, Zv,num_bound, 1.0);
            //solver.set_solver(QPB_SOLVER_GRADDESC);
            //solver.set_solver(QPB_SOLVER_GS);
#ifdef USE_CPLEX
            solver.set_solver(QPB_SOLVER_CPLEX);
#else
            solver.set_solver(QPB_SOLVER_SCAS);
#endif

            solver.solve_qp(beta, num_bound);

            t.stop();
#ifdef DEBUG_SUBGRADIENTSVM
            tim+=t.time_diff_sec(true);
#else
            tim+=t.time_diff_sec(false);
#endif

            //CMath::display_vector(beta, num_bound, "beta gs");
            //solver.set_solver(QPB_SOLVER_CPLEX);
            //solver.solve_qp(beta, num_bound);
            //CMath::display_vector(beta, num_bound, "beta cplex");

            //CMath::display_vector(grad_w, num_feat, "grad_w");
            //SG_PRINT("grad_b:%f\n", grad_b);
        }

        CMath::add(grad_w, 1.0, w, -1.0, sum_CXy_active, num_feat);
        grad_b = -sum_Cy_active;

        for (int32_t i=0; i<num_bound; i++)
        {
            features->add_to_dense_vec(-C1*beta[i]*get_label(idx_bound[i]), idx_bound[i], grad_w, num_feat);
            if (use_bias)
                grad_b -=  C1 * get_label(idx_bound[i])*beta[i];
        }

        dir_deriv = CMath::dot(grad_w, v, num_feat) - grad_b*sum_Cy_active;
        for (int32_t i=0; i<num_bound; i++)
        {
            float64_t val= C1*get_label(idx_bound[i])*(features->dense_dot(idx_bound[i], grad_w, num_feat)+grad_b);
            dir_deriv += CMath::max(0.0, val);
        }
    }
    else
    {
        CMath::add(grad_w, 1.0, w, -1.0, sum_CXy_active, num_feat);
        grad_b = -sum_Cy_active;

        dir_deriv = CMath::dot(grad_w, grad_w, num_feat)+ grad_b*grad_b;
    }
//.........这里部分代码省略.........
开发者ID:JMR-b,项目名称:shikken,代码行数:101,代码来源:SubGradientSVM.cpp


注:本文中的CTime::time_diff_sec方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。