tiny_cnn程序总结2----网络的训练过程

    在网络的整体架构搭建好之后,剩下的最重要的部分就是该怎么训练网络,如何更新各层网络的weight和bias参数,LeNet网络采用的optimization的方式是Stochastic Diagonal Levenberg-Marquardt的方式。下面就先介绍以下Stochastic Doagonal Levenberg-Marquardt的基本思想,然后再看tiny_cnn中的实现过程。

    1,Stochastic Diagonal Levenberg-Marquardt的原理:stochastic diagonal levenberg-marquardt主要做的就是利用二阶偏导数对训练进行加速,具体细节在《Neural Networks:Tricks of the Trade》里面有介绍,而stochastic指的是把levenberg-marquardt的方法用于在线学习,至于在线学习,在另一篇文章里有介绍。大体上来说这个方法就是利用二阶偏导数修正每个网络参数的学习速率,使得能加快训练速度。

    2,tiny_cnn中的实现过程:首先在main函数中执行了nerwork对象的训练接口:

   

nn.train(train_images, train_labels, minibatch_size, 20, on_enumerate_minibatch, on_enumerate_epoch);

    其中:train_images是输入的字符图像,train_labels是输出的字符识别结果,minibatch_size表示一次训练minibatch_size的样本,后面两个参数用于函数的调用。

    紧接着,程序就会进入network对象中,在network中train函数实现中,主要做了3件事:第一,初始化权值,权值的初始化对于最后的训练结果影响很大,但是对权值初始化的方法我们不深入了;第二,计算hessian矩阵,hessian矩阵用于后面对权值的更新,至于为何要计算hessian矩阵,在optimization的原理中,我们有提到;第三,开始训练,包括计算梯度和更新网络参数。这里网络是进行迭代20次的训练,就是说程序会对输入样本做20此相同的训练过程,只不过每次初始化的网络参数都不同。最后通过对网络参数的平均得出最终训练的网络。程序如下:

for (int iter = 0; iter < epoch; iter++) { // epoch:
            if (optimizer_.requires_hessian())
                calc_hessian(in, t_cost); // calculate derivatice for every layer
            for (size_t i = 0; i < in.size(); i+=batch_size) {
                train_once(&in[i], &t[i],
                           static_cast<int>(std::min(batch_size, in.size() - i)),
                           n_threads,
                           get_target_cost_sample_pointer(t_cost, i));
                on_batch_enumerate();

                if (i % 100 == 0 && layers_.is_exploded()) {
                    std::cout << "[Warning]Detected infinite value in weight. stop learning." << std::endl;
                    return false;
                }
            }

    这里我们主要介绍以下如何计算权值和更新网络参数,更新网络参数首先需要计算梯度&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值