Проблема с обучением нейронной сети. конфигурация 16384-512-128-128-42
Возникла проблема с обучение нейронной сети (перцептрон).Пробовал другие конфигурации - не получается. Обучаю на базе NIST Special Database 19 second edition(384000 картинок).Там картинки 128 на 128 пикселей, предварительно перевел в csv формат. Во время обучения подаю рандомные картинки из базы, также использую DropOut с вероятность 20 процентов. Внизу прикрепил свою функцию BackPropogation и WeightUpdater. Важно, что до перехода на новую базу, сеть обучалась на данных в формате 28 на 28 пикселей.И все было отлично, отгадывала примерно 95 процентов букв. А как только перешел на 128 на 128, произошла такая проблема. Learning rate равен 0.01*0.01^(x/20) где х это эпоха. Также есть закономерность в отгадывании(фото прикреплено)слева ответ нейронки, справа правильный ответ. Может кто нибудь поможет? очень нужна помощь[
void Network::BackPropogation(double predict)
{
for (int i = 0; i < neurons_on_layer[layers - 1]; i++) {
if (i != predict)
error_of_neurons[layers - 1][i] = -neurons[layers - 1][i] * function.ModReluDerivate(neurons[layers - 1][i]);
else
error_of_neurons[layers - 1][i] = (1.0 - neurons[layers - 1][i]) * function.ModReluDerivate(neurons[layers - 1][i]);
}
for (int k = layers - 2; k > 0; k--) {
Matrix::MultiTrans(weight[k], error_of_neurons[k + 1], error_of_neurons[k], neurons_on_layer[k + 1]);
for (int j = 0; j < neurons_on_layer[k]; j++)
error_of_neurons[k][j] *= function.ModReluDerivate(neurons[k][j]);
}
}
void Network::WeightsUpdater(double learning_rate) {
for (int i = 0; i < layers - 1; ++i) {
for (int j = 0; j < neurons_on_layer[i + 1]; ++j) {
for (int k = 0; k < neurons_on_layer[i]; ++k) {
weight[i].GetElement(j, k) += neurons[i][k] * error_of_neurons[i + 1][j] * learning_rate;
}
}
}
for (int i = 0; i < layers - 1; i++) {
for (int k = 0; k < neurons_on_layer[i + 1]; k++) {
bias_weight[i][k] += error_of_neurons[i + 1][k] * learning_rate;
}
}
}