训练CNN

时间:2018-11-17 13:07:23

标签: machine-learning conv-neural-network mnist

我正在尝试使用自制的CNN(C ++)在MNIST上训练我的网络。

当我使用简单的模型时,它会给出足够好的结果,例如: 卷积(2个特征图,5x5)(Tanh)-> MaxPool(2x2)->展平->完全连接(64)(Tanh)->完全连接(10)(Sigmoid)。

4个纪元后,其行为类似于此处1
在16个时期之后,它在测试数据集上产生了约6.5%的错误。

但是在Conv中有4个特征贴图的情况下,MSE值并没有提高,有时甚至提高了2.5倍2

在Adam优化器的帮助下,使用了在线培训模式(alpha:0.01,beta_1:0.9,beta_2:0.999,epsilon:1.0e-8)。计算公式为:

double AdamOptimizer::calc(int t, double& m_t, double& v_t, double g_t)
{
    m_t = this->beta_1 * m_t + (1.0 - this->beta_1) * g_t;
    v_t = this->beta_2 * v_t + (1.0 - this->beta_2) * (g_t * g_t);

    double m_t_aver = m_t / (1.0 - std::pow(this->beta_1, t + 1));
    double v_t_aver = v_t / (1.0 - std::pow(this->beta_2, t + 1));

    return -(this->alpha * m_t_aver) / (std::sqrt(v_t_aver) + this->epsilon);
}  

那么,可能是由于缺少一些其他学习技术(辍学,批量标准化)或错误设置参数导致此问题吗?还是由某些实施问题引起的?

P。 S.如有必要,我提供a github link

1 个答案:

答案 0 :(得分:0)

尝试降低学习率。