Как стать автором
Обновить

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

критерий минимума Евклидова расстояния (что эквивалентно максимуму скалярных произведений


Конечно же, если вектора весов нормированы.
при подаче одной гаммы цветов всегда будут активироваться нейроны из одной области карты соответствующей данному цвету

Под гаммой понимается последовательность цветов (какого размера) или всё-таки один цвет?
Для чего может применяться такая нейросеть?
Для чего может применяться такая нейросеть?

На практике, SOM — это один из способов для визуализации многомерных данных.

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

Значение
self.minsigma
у вас всегда равно 1

Константу
minlr
вероятно, имеет смысл определять в
__init__()
, а не в
training_op()
, ибо последняя вызывается много раз, а конструктор всего один.

Tensorflow ругается на имя Learning rate в
lr_summary = tf.summary.scalar('Learning rate', lr)


Судя по коду,
dim
не размер решётки, а квадратный корень из числа нейронов. Размер решётки всегда равен 1, согласно значениям матрицы
self.positions


Вместо того, чтобы везде вызывать
self.dim.eval()
можно ввести обычную питоновскую переменную для хранения этого значения, и инициализировать её в конструкторе.
В шестой формуле, да это число шагов самоорганизации, соответственно на 1000 шаге сигма всегда будет останавливаться на значении 1.

Константу minlr можно определить в __init__ только из-за удобства. Место определения не будет влиять на скорость выполнения. Это особенность TensorFlow, training_op определяется до цикла и константы так же инициализируются до основного цикла. (код функции def training_op(self) выполняется всего один раз).

У меня TensorFlow на это не ругается:
lr_summary = tf.summary.scalar('Learning rate', lr)

Вообще этот код служит для записи данных по переменной параметра скорости обучения в tensorboard, его можно убрать, на обучения он не влияет.

Размер решетки — это и есть число нейронов. То есть если dim=10, то решетка будет 10Х10 = 100 нейронов. В массиве self.positions хранятся 2d координаты нейронов.
#self.postions.shape = (100, 2), для dim = 10
#self.positions => [[0,1],[0,2], ..., [9,8], [9,9]


self.dim.eval()

используется не для обучения, а для определения победившего нейрона уже после обучения, то есть там цикла нет.
Вопрос, может быть, ламерский… Но как дальше в этой схеме использовать обученную сеть?
Вот, скажем, у меня тестовые данные размерности 500. И хочу я, скажем, heatmap по своим данным нарисовать на карте 10х10. Это после обучения надо на всех сэмплах прогнать сеть — как?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации