Нейронная сеть для набора данных iris

#python #machine-learning #neural-network #classification #sigmoid

#python #машинное обучение #нейронная сеть #классификация #сигмоид

Вопрос:

Предыстория: я пишу на Python трехслойную нейронную сеть, использующую мини-пакетный стохастический градиентный спуск, специально разработанный для идентификации трех классов растений iris из знаменитого набора данных iris. Входной слой имеет четыре нейрона, по одному для каждого объекта в данных. Скрытый слой имеет 3 нейрона (но код допускает вариации в количестве нейронов скрытого слоя), а выходной слой имеет три нейрона (по одному для каждого вида). Все нейроны используют сигмовидные функции активации.

Проблема: потеря (среднеквадратичная ошибка) обычно уменьшается со временем, однако точность (обычно ниже 55,55% или даже 33,33%) остается неизменной. Я пробовал экспериментировать с номерами итераций разных эпох и скоростью обучения, но ничего не получалось. Интересно, что чаще всего выходные данные для алгоритма остаются фиксированными независимо от входных значений. Я вполне уверен в своей математике, поскольку потери, похоже, уменьшаются по мере увеличения количества эпох.

Чтобы воспроизвести проблему: просто запустите код Python и соблюдайте LEARNING_RESULTS.txt досье. (Убедитесь, что iris.txt файл в репозитории находится в том же каталоге)

Вопрос: Как я могу улучшить производительность для этой нейронной сети?

Ссылка на репозиторий GitHub: https://github.com/kwonkyo/neural-networks

Спасибо!

ОБНОВЛЕНИЕ: проблема решена. Я добавлял постоянное значение (числовую сумму суммы матриц мини-пакетов) к матрицам веса и смещения вместо суммы градиентных матриц мини-пакетов. Обновленный код был отправлен на github.

Комментарии:

1. Попробуйте больше скрытых нейронов. Если потери уменьшаются, но точность нет, часто модель как-то неадекватна.

2. Я обнаружил проблему: когда я обновлял производные веса и смещения, вместо того, чтобы выполнять сложение матрицы между матрицей веса и матрицей градиента, я допустил ошибку, добавив вместо этого сумму матрицы градиента. По какой-то причине numpy позволил мне добавить матрицу и число. Исправление этого дало мне точность около 98%! Это так весело.

3. (Раньше я пытался добавить больше скрытых нейронов, но это не улучшило результаты)