Sieć neuronowa - funkcja aktywacji zwraca ciągle taką samą wartość?

0

Mam problem z siecią neuronową.
Na początek - całość wygląda tak: http://pastebin.com/cQVmm3Hh

Fragment, z którym mam problem wygląda tak:

void Neuron::feedForward(const Layer &prevLayer)
{
	double sum = 0.0;

	for (unsigned n = 0; n < prevLayer.size(); n++)
	{
		sum += prevLayer[n].getOutputVal() *
			prevLayer[n]._outputWeights[_myIndex].weight;
	}

	_outputVal = Neuron::_transferFunction(sum);
}
 

Suma liczy się dobrze, problem jest prawdopodobnie z funkcją Neuron::_transferFunction(sum)

double Neuron::_transferFunction(double x)
{
	return tanh(x);
} 

Za każdym razem przekształca sumę w liczbę -9.2559631349317831e+61.
Trochę się nad tym głowię, czy jest ktoś w stanie wskazać mi gdzie robię błąd?

1

A jakie wartości ci wychodzą w tej sumie? Bo może masz takie niskie wagi że wychodząc i bardzo małe wartości i ten tangens zwraca ci 0?

0

Wartości w okolicach (-1.(..)e+61) - (-9.(..)e+61)

Czyli powinienem pogrzebać z wagami na połączeniach, żeby je troszkę zwiększyć?

E: Wagi połączeń pomiędzy warstwami latają w okolicach 0.1 - 0.9, czyli chyba się w miarę zgadza, tak?

2

Coś kręcisz, bo po pierwsze takie duże wartości sumy wskazują na to że coś robisz źle, po drugie tanh() ma przedział wartości od -1 do 1 i chyba nie bardzo może ci zwrócic cokolwiek większego od tej liczby, a ty twierdzisz że zwraca cośtam +1061 ;] Pewny jesteś że nie ma tam czasem -e61? Bo wtedy to co piszesz byłoby możliwe.

0

Chyba rzeczywiście coś popieprzyłem, sprawdziłem wszystko trzy razy i wychodzi mi, że takie wartości ma dodatkowy neuron biasu, który by wychodziło że jest pomijany przez moje pętle i nie przypisuję mu wartości, przez co wisi biedak i psuje mi całość. Sorki za kłopot, wracam do naprawiania, skoro już wiem gdzie leży błąd. No i dzięki za pomoc ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1