Я пытаюсь обучить свою сеть на MNIST, используя самодельный CNN (C ++).
Это дает достаточно хорошие результаты, когда я использую простую модель, например: Convolution (2 карты функций, 5x5) (Tanh) -> MaxPool (2x2) -> Flatten -> Fully-Connected (64) (Tanh)) -> Полностью подключен (10) (Сигмоид).
После 4 эпох он ведет себя так, как здесь 1 .
После 16 эпох он дает ошибку ~ 6,5% в тестовом наборе данных.
Но в случае с 4 картами объектов в Conv значение MSE не улучшается, иногда даже увеличивается в 2,5 раза 2 .
Используется онлайн-режим обучения с помощью оптимизатора Adam (альфа: 0,01, бета_1: 0,9, бета_2: 0,999, эпсилон: 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);
}
Итак, может ли эта проблема быть вызвана отсутствием некоторых дополнительных методов обучения (отсев, нормализация партии) или неправильно заданными параметрами?Или это вызвано некоторыми проблемами реализации?
PS Я предоставляю ссылку на github , если необходимо.