Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/89: Рейтинг темы: голосов - 89, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 15.12.2020
Сообщений: 1

Сеть Кохонена

15.12.2020, 02:02. Показов 18646. Ответов 2

Студворк — интернет-сервис помощи студентам
Доброго времени суток, начал изучать сети и возникла задача реализации сети Кохонена. В качестве датасета используются изображения 28х28, которые заранее были конвертированы в пиксельные массивы с градацией серого и записаны в csv файл. Собственно суть проблемы заключается в том, что я упорно не могу понять, что именно делаю не так, ибо сеть дает не верный результат. Так что, если кто-нибудь поможет найти ошибки в коде, или объяснит что именно я делаю не так, буду крайне признателен.

код
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import numpy as np
import pandas as pd 
import math
import pickle
import random
 
trainl = 70
testl=25
prevWin = [-1, 0]
epoch = 0
D0 = 10
a0 = 0.9
 
Claster = np.zeros((trainl,2))
X = np.array(pd.read_csv('mnist_train.csv', nrows=trainl))
test_num = np.array(pd.read_csv('mnist_train.csv', nrows=trainl))
#W = np.random.uniform(0.0, 0.3, size=(784, 10) )
W = np.zeros((784,10))
W = W.astype('float64')
X = X.astype('float64')
 
 
for i in range(trainl):
    for j in range(784):
        X[i][j] = X[i][j]/254
 
 
def vdist(V, W):
    S = 0
    for i in range(len(V)):
        S += (V[i] - W[i]) ** 2
    return math.sqrt(S)
 
while epoch < 25:
    Sum = 0
    epoch += 1
    for a in range(trainl):
        Dis = list()
        for j in range(10):
            d = 0
            for i in range(784):
                d += (X[a][i]-W[i][j])**2
            Dis.append(math.sqrt(d))
        #print(Dis)
        win = Dis.index(min(Dis))
        if prevWin[0] == win:
            if prevWin[1] > 3:
                #print(f"Слишком много побед для {win}")
                win = random.randint(0, 9)
                prevWin = [win, 1]
            else:
                prevWin[1] += 1
        else:
            prevWin = [win, 1]
        DN = round(D0)
        for j in range(10):
            if vdist(W[:,j], W[:,win]) > DN and j != win:
                continue
            for i in range(784):
                W[i, j] += a0 * (X[a][i] - W[i, j])
                Sum += abs(a0 * (X[a][i] - W[i, j]))
    print(f'Эпоха: {epoch}. \nDn: {D0}.\nan: {a0}\nИзменения весов: {Sum}.')
    if a0 - 0.05 >= 0.1:
        a0 -= 0.05
    if  D0 - 0.5   >= 0:
        D0 -= 0.5  
 
for a in range(trainl):
    index = test_num[a][0]
    Dis = list()
    for j in range(10):
        d = 0
        for i in range(784):
            d += (X[a][i] - W[i, j]) ** 2
        Dis.append(math.sqrt(d))
    win = Dis.index(min(Dis))
    Claster[a][0] = win
    Claster[a][1] = index
    print('Число',index, 'Кластер', win) 
print('Кластер  цифра')
print(np.sort(Claster, axis = 0))
результат работы сети
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
[Кластер  цифра]
[[0. 0.]
 [0. 0.]
 [0. 0.]
 [0. 0.]
 [0. 0.]
 [0. 0.]
 [0. 0.]
 [0. 0.]
 [1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]
 [2. 1.]
 [2. 1.]
 [2. 1.]
 [2. 1.]
 [2. 2.]
 [2. 2.]
 [2. 2.]
 [2. 2.]
 [2. 3.]
 [2. 3.]
 [2. 3.]
 [2. 3.]
 [2. 3.]
 [2. 3.]
 [2. 3.]
 [2. 3.]
 [2. 4.]
 [2. 4.]
 [2. 4.]
 [2. 4.]
 [2. 4.]
 [3. 4.]
 [3. 4.]
 [3. 4.]
 [3. 4.]
 [3. 5.]
 [3. 5.]
 [3. 5.]
 [3. 5.]
 [3. 5.]
 [3. 6.]
 [3. 6.]
 [3. 6.]
 [4. 6.]
 [4. 6.]
 [4. 6.]
 [4. 6.]
 [4. 7.]
 [4. 7.]
 [4. 7.]
 [4. 7.]
 [5. 7.]
 [5. 8.]
 [5. 8.]
 [5. 8.]
 [5. 8.]
 [5. 8.]
 [5. 9.]
 [6. 9.]
 [6. 9.]
 [6. 9.]
 [7. 9.]
 [7. 9.]
 [8. 9.]
 [8. 9.]
 [9. 9.]]
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.12.2020, 02:02
Ответы с готовыми решениями:

Самоорганизующиеся карты Кохонена
Имеется код, но не понятно несколько моментов Класс нейрона: class Neuron: def __init__(self, x:int, y:int, dim: int,...

Алгоритм Кохонена
Дали задание по книге Паклина &quot;Бизнес-аналитика от данных к знаниям&quot;, по главе 16 - написать аналогичную программу в python. Есть ли...

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

2
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
21.03.2021, 13:36
Fubar, раздел не тот -- это веб сети, а не нейронные. Указал модерам чтоб перенесли
0
533 / 438 / 47
Регистрация: 17.07.2013
Сообщений: 2,236
22.03.2021, 19:49
Цитата Сообщение от Fubar Посмотреть сообщение
trainl = 70
Это означает, что обучение идет по 70 картинкам?

Цитата Сообщение от Fubar Посмотреть сообщение
X[i][j] = X[i][j]/254
Откуда взялось 254?

Цитата Сообщение от Fubar Посмотреть сообщение
import math
Зачем math если есть уже np?

Цитата Сообщение от Fubar Посмотреть сообщение
import pickle
Зачем?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.03.2021, 19:49
Помогаю со студенческими работами здесь

Сеть Кохонена
Есть программа в mathlab plot(P(1,:), P(2,:), '+m'); title('Input vectors'); xlabel('P(1,:)'); ylabel('P(2,:)'); hold on; ...

Сеть Кохонена
Здравствуйте! Есть несколько вопросов: 1)Можно ли использовать сети Кохонена для нахождения центров масс скоплений точек радиуса r,...

Сеть Кохонена
Вечер добрый уважаемые форумчане,просьба,помогите написать программу,которая способна создать сеть Кохонена,обучать ну и т.д.Спасибо!

Нейронная сеть Кохонена
Применить нейронную сеть Кохонена с самообучением для задачи кластеризации. На первом этапе сгенерировать случайные точки на плоскости...

Нейронная сеть Кохонена
Как аналитически записать нейронную сеть Кохенана состоящую из одного слоя и 2 нейронов, на конкретном примере. Выходные вектора и ,w...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru