TanH (x) каким-то волшебным образом становится больше 1 и больше 1 миллион - PullRequest
0 голосов
/ 12 января 2019

После создания следующей нейронной сети:

nn = new BasicNetwork();
     nn.addLayer(new BasicLayer(null, true, 29));
     nn.addLayer(new BasicLayer(new ActivationReLU(), true, 1000));
     nn.addLayer(new BasicLayer(new ActivationReLU(), true, 100));
     nn.addLayer(new BasicLayer(new ActivationReLU(), true, 100));
     nn.addLayer(new BasicLayer(new ActivationTANH()  ,false, 4));

     nn.getStructure().finalizeStructure();
     nn.reset();

Я допустил ошибку больше 10 ^ 38. Это совершенно безумно. Поэтому я сам кодировал функцию ошибки и заметил, что ошибка все еще такая большая. Сначала я проверил свои IdealOutputs и заметил, что все они были в диапазоне от -1 до 1. Расчетные выходы были намного больше, чем 1. Поэтому я заключаю ошибку с плавающей запятой.

Я прав в своем заключении? Что я могу сделать, чтобы в следующий раз избежать таких глупых, отнимающих много времени ошибок?

С уважением

Edit:

nn = new BasicNetwork();
     nn.addLayer(new BasicLayer(null, true, 29));
     nn.addLayer(new BasicLayer(new ActivationSigmoid(), true, 1000));
     nn.addLayer(new BasicLayer(new ActivationSigmoid(), true, 100));
     nn.addLayer(new BasicLayer(new ActivationSigmoid(), true, 100));
     nn.addLayer(new BasicLayer(new ActivationTANH()  ,false, 4));

     nn.getStructure().finalizeStructure();
     nn.reset();

Проблема по-прежнему возникает после использования сигмоидальных функций. Как это исправить?

1 Ответ

0 голосов
/ 12 января 2019
- Write using a very smaller learning rate like 0.0001 or even smaller.
- Randomly initialize the weights.
- Initialize the biases as 1 initially.
- Try using Batch Normalization 

Функция ReLU фактически не может сжать значения, потому что числа, являющиеся положительными, приобретают y = x. Из-за увеличения градиента, эти значения становятся все больше.

...