Ich versuche XOR -Problem zu lösen: < /p>
Code: Select all
| i0 | i1 | desired output |
----------------------------
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 1 | 0 |
< /code>
Mit meinem aktuellen Code leite ich alle 4 oben genannten Datensätze in einer einzelnen Epoche aus. Ich wiederhole dann die Epoche 20.000 Mal. Ich berechnet den Fehler nach jedem Datensatz, nicht nach jeder Epoche und streife den Fehler gleichzeitig zurück. Verstehe, ich möchte ein Ergebnis zwischen 0
Ich habe versucht, zwischen 0 und 1 sowie zwischen -1 und 1 mit einer einheitlichen Verteilung nach dem Zufallsprinzip zu generieren. Ich habe versucht, die Xavier -Initialisierung als einheitliche und normale Verteilung zu verwenden. Keines davon scheint zu verhindern, dass das Netzwerk nicht konvergiert. Ich habe verschiedene Kombinationen der Aktivierungsfunktion und Gewichtserzeugung ausprobiert.#include
#include
#include
#include
#include
#include
#include
#include
typedef float DataType;
typedef DataType (*ActivationFuncPtr)(const DataType&);
const DataType learningRate = std::sqrt(2.f);
const DataType momentum = 0.25f;
const std::size_t numberEpochs = 20000;
DataType sigmoid(const DataType& x)
{
return DataType(1) / (DataType(1) + std::exp(-x));
}
DataType sigmoid_derivative(const DataType& x)
{
return x * (DataType(1) - x);
}
DataType relu(const DataType& x)
{
return x