我正在尝试使用自制的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。
答案 0 :(得分:0)
尝试降低学习率。