Как я могу гарантировать, что конвергенция всегда происходит в этой решающей нейронной сети XOR?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу гарантировать, что конвергенция всегда происходит в этой решающей нейронной сети XOR?

Сообщение Anonymous »

У меня есть сеть с двумя входами, два скрытых узла в одном слое и выходной узел. https://i.sstatic.net/lvefs.png " /> < /p>

Я пытаюсь решить проблему XOR: < /p>

Код: Выделить всё

| i0 | i1 | desired output |
----------------------------
| 0  | 0  |        0       |
| 1  | 0  |        1       |
| 0  | 1  |        1       |
| 1  | 1  |        0       |
< /code>

С моим текущим кодом я запускаю все 4 записи выше в одну эпоху. Затем я повторяю эпоху 20 000 раз. Я рассчитываю ошибку после каждой записи, а не каждую эпоху, и я возвращаю ошибку в это же время. < /P>

Я использую только сигмоид в выходном слое Поймите, я хочу результат между 0 
и 1 .

Моя сеть, большую часть времени сходится. В других случаях это не так. >
Я пробовал случайным образом генерировать веса между 0 и 1 , а также между -1 и 1 с использованием равномерного распределения. Я пытался использовать инициализацию Ксавье как равномерное и нормальное распределение. Ничто из этого, кажется, не предотвращает сходимость сети. Я пробовал различные комбинации функции активации и генерации веса. < /P>

Вот мой полный код: < /p>

#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

Подробнее здесь: https://stackoverflow.com/questions/583 ... al-network
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»