#алгоритм #нейронные_сети
У меня есть нейронная сеть Кохонена, состоящая из десяти нейронов и кучи входов. На вход ей подается спектральные портреты слов (были записаны на диктофон слова от нуля до десяти, а потом преобразованы в спектральные портреты). Перед подачей портреты нормализуются в пределах [-1; 1]. Матрица весов заполняется случайным образом при условии: (1) где M - длина входного вектора Подаю я какой-то вектор, считаю для него R и выбираю нейрон с наименьшим R (x - входные параметры): (2) Дальше необходимо скорректировать весовые коэффициенты: (3) Информацию брал отсюда Я по очереди подаю на вход спектральные портреты слов "ноль", "один", "два" и т.д. (представляют собой вектор с элементами [-1; 1]). Все слова почему-то попадают на один нейрон. При этом входные вектора довольно разные. В чем может крыться проблема? Нет ли ошибок в алгоритме сети? UPD: У меня значения в векторе R (вектор расстояний) получаются практически одинаковые для всех нейронов: 237.3019 237.0699 237.0621 237.4326 237.0400 237.3023 237.3323 237.5506 237.1476 237.3318 О чем это может говорить? Что плохие входные данные? UPD 2: Код реализации function [index, W] = recognize(W, X, SPEED) % % W - матрица весовых коэффициентов % X - вектор входных параметров % SPEED - коэффициент скорости обучения % % index - номер нейрона-победителя % AMOUNT_NEURON = size(W, 1); % Вычисление R R = zeros(AMOUNT_NEURON, 1); for i = 1:1:AMOUNT_NEURON for j = 1:1:size(W, 2) R(i) = R(i) + (X(j) - W(i, j))^2; end %R(i) = sqrt(R(i)); end % Определение нейрона-победителя [val, i] = min(R); % Коррекция коэффициентов for j = 1:1:size(W, 2) W(i, j) = W(i, j) + SPEED*(X(j) - W(i, j)); end index = i; Пойду тогда колдовать с начальной инициализацией весов
Ответы
Ответ 1
Такое может быть, если начальные вектора весов лежат в стороне от тренировочных векторов, как на картинке: Тогда ближайший вектор весов притянется к тренировочным точкам, и дальше все операции будут происходить только с ним. действительно, если матрицу весов проинициализировать не случайно, а векторами спектральных портретов, то все работает так, как и должно. Но тогда возникает вопрос где же тут самообучение сети, если мы в начале задаем так сказать эталоны. Предполагается, что у вас есть множество спектральных портретов каждого типа. В ходе самообучения веса перейдут в центр кластера соответствующего одному из типов. Еще вариант, как избежать ситуации, показанной на картинке: для инициализации считайте среднее всех спектральных портретов, потом к этой точке прибавляйте случайные добавки.
Комментариев нет:
Отправить комментарий