Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничный Кохонен. / 25 сообщений из 107, страница 1 из 5
13.03.2015, 16:40
    #38904198
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
А вот кому Кохонена ?
А именно, KNNL .

В общем, небольшая программка (нужно QT5), которая реализует классический пример для работы с картами Кохонена:
распределяет цвета цветового пространства по карте, и показывает её. Показывает по шагам в процессе обучения.
Полезно для овладевания основами работы с картами Кохонена.
Также можно использовать в качестве очень плохого скринсейвера.

Код: plaintext
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.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
#include <string>
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <list>
#include <map>
#include <iterator>
#include <algorithm>

#include <functors.hpp>
#include <basic_neuron.hpp>
#include <euclidean_distance_function.hpp>
#include <rectangular_container.hpp>
#include <kohonen_network.hpp>
#include <randomize_policy.hpp>
#include <print_network.hpp>
#include <wta_training_algorithm.hpp>
#include <wtm_topology.hpp>
#include <generalized_training_weight.hpp>

#include "neuro.h"

std::ostream& operator << ( std::ostream &os, const color_t &c )
{
    os << '(' << c.r() << ',' << c.g() << ',' << c.b() << ')';
    return os;
}

void generateColors( color_set_t &colors )
{
    size_t max_coloroid_val = 32;
    size_t nc = max_coloroid_val * max_coloroid_val * max_coloroid_val;
    colors.clear();
    colors.reserve( nc );
    for( coloroid_t r = 0; r < max_coloroid_val; ++r)
        for( coloroid_t g = 0; g < max_coloroid_val; ++g)
            for( coloroid_t b = 0; b < max_coloroid_val; ++b)
                colors.push_back( color_t( r,g,b ) );
}

WTMColorLearning generateColorsSOM( color_set_t &colors, som_t &som )
{
    neural_net::generate_kohonen_network( 30, 30, CauchyOfDouble(2.0, 2), ColorEuclideanDistanceFunc(), colors, som, neural_net::Internal_randomize() );
    //neural_net::print_network_weights( std::cout, som );
    return WTMColorLearning ( ColorTraining( Classic_weight( G_f_net ( 10, 2 ), G_f_space( 100, 1 ), Maxtop(), ColorEuclideanDistanceFunc() ), 0.3) );
}

void trainColorsSOM( color_set_t &colors, som_t &som, WTMColorLearning &learn )
{
    // learning
    std::random_shuffle( colors.begin(), colors.end() );

    //std::cout << "\nLeaning phase #" << i << "...";  std::cout.flush();
    learn( colors.begin(), colors.end(), &som );
    //std::cout << "done" << std::endl;

    // decrease sigma parameter in network
    // will make training process more sharpen with each epoch,
    // but it have to be done slowly :-)
    double sigma = learn.training_functional.generalized_training_weight.network_function.sigma * 0.75;
    if( 1 || sigma > 0.5 )
        learn.training_functional.generalized_training_weight.network_function.sigma = sigma;

    //neural_net::print_network_weights( std::cout, som );
}

std::pair< unsigned, unsigned > findColorBMU( const som_t &som, const color_t &color )
{
    double r = 100000000000.;
    std::pair< unsigned, unsigned > bmu( 0, 0 );

    for( unsigned i = 0; i < som.get_no_rows(); ++i )
        for( unsigned j = 0; i < som.get_no_columns(); ++i )
        {
            double rk = som.objects [ i ][ j ] ( color );
            if( rk < r )
            {
                bmu = std::pair< unsigned, unsigned >( i, j );
                r = rk;
            }
        }
    return bmu;
}


double totalDistance( const color_set_t &colors, const som_t &som )
{
    double d = 0;
    for( auto clr = colors.cbegin(); clr != colors.cend(); ++clr )
    {
        std::pair< unsigned, unsigned > bmu = findColorBMU( som, *clr );
        const ColorSOMNeuron &n = som.objects [ bmu.first ] [ bmu.second ];
        d += n( *clr );
    }
    return d;
}


/*
double totalDistance( const color_set_t &colors, const som_t &som )
{
    double d = 0;
    for( auto clr = colors.cbegin(); clr != colors.cend(); ++clr )
        for( unsigned r = 0; r < som.get_no_rows(); ++r )
            for( unsigned c = 0; c < som.get_no_columns(); ++c )
            {
                const ColorSOMNeuron &n = som.objects [ r ] [ c ];
                //color_t wc( n.weights.r(), n.weights.g(), n.weights.b() );
                d += n( *clr );
            }
    return d;
}
*/



Весь код с проектом в архиве

----
Читал хинты оракла. Много думал...
...
Рейтинг: 0 / 0
13.03.2015, 17:41
    #38904324
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
Ее реально собрать в консоли?
...
Рейтинг: 0 / 0
13.03.2015, 17:52
    #38904342
Герой дня
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
хотелось бы скриншотов
...
Рейтинг: 0 / 0
13.03.2015, 17:54
    #38904347
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
Помнится... в универе мы ради прикола собирали в С++ свой собственный скринсейвер. Для Win95.
...
Рейтинг: 0 / 0
13.03.2015, 20:13
    #38904485
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
maytonЕе реально собрать в консоли?

Собрать -- реально. Но работать в консоли не будет -- нужен графический дисплей.
...
Рейтинг: 0 / 0
13.03.2015, 20:19
    #38904493
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
Герой дняхотелось бы скриншотов

Вот.
...
Рейтинг: 0 / 0
14.03.2015, 01:42
    #38904675
многоразовый клон 26
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
MasterZiv,

отличная таблица для дизайнера
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
04.06.2020, 17:30
    #39966212
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
Up. Хорошая тема была.

Жаль что не поддержали. Предлагаю ее поднять новым пятничным топиком в Программировании.

Разумеется мы ее переосмыслим. Саму постановку.
...
Рейтинг: 0 / 0
05.06.2020, 08:49
    #39966354
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
mayton,
Qt ставить потребуется
...
Рейтинг: 0 / 0
05.06.2020, 08:54
    #39966358
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
Мы не будем ограничиваться KNNL.

Собственно кохонен описан в теории и меня интересует именно своя реализация и практическое использование.
...
Рейтинг: 0 / 0
16.06.2020, 11:08
    #39969645
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
mayton
Собственно кохонен описан в теории и меня интересует именно своя реализация и практическое использование.
Почитал теорию, мало что понял про принцип действия. Есть примеры применения? Что-то я слаб в абстракциях :)
...
Рейтинг: 0 / 0
16.06.2020, 11:20
    #39969656
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
CEMb
mayton
Собственно кохонен описан в теории и меня интересует именно своя реализация и практическое использование.
Почитал теорию, мало что понял про принцип действия. Есть примеры применения? Что-то я слаб в абстракциях :)

Я тоже шел от практики. В основном от просмотра статей и видосов.

Если у тебя есть набор многомерных исследуемых объектов - то ты можешь разложить их на плоскости.
Расплющить. Таким образом чтобы сходные векторы находились физически близко. Они как-бы притягиваются
похожие к похожим. Это и есть эффект само-организации карты.

Яркий пример. RGB картинка с 16 млн цветов имеет векторы - тройки RGB = {r,g,b}
Карта кохонена может разложить на плоскости (на квадратике или на хексагоне)
набор центров кластеров где будут наиболее ярко выраженные цвета картинки.

При это входной слой будет иметь 3 входа (RGB) а выходной (кластерный слой)
- столько сколько мы захотим. Но конечно нет смысла делать 16 млн. Обычно
задача классификации - это сведение миллионов измерямыех объектов внешнего
мира - в 3-5-7 классов или признаков. Вот в биологии это очень показательно.
Классификация растений. А если биолог сводит тысячи листиков и цветов к прямоугольную
табличку - то у него моментально появляется визуальное понимание классификатора
этих растений.

За кадром остаётся вопрос единственности такой классификации. Мне кажется
имеет смысл сделать много экспериментов по построению сети и выбрать наиболее
удачный расклад.
...
Рейтинг: 0 / 0
16.06.2020, 11:45
    #39969679
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
mayton,

Обучение без учителя. Как-то Гугл рапортовал, что их нейронная сеть, которую они учили кошек на фотках искать, научилась определять количество котов на фотах. При этом изначально такой функции (определения количества) в нейро-сеть заложено не было. Т.е. нейро-сеть самостоятельно вывела новый смысл, проявила себя творческим исследователем. Вот я всё думаю: они правду сказали или набрехали.
...
Рейтинг: 0 / 0
16.06.2020, 11:50
    #39969683
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
mayton
...
А, вот теперь стало более понятно, спасибо!
...
Рейтинг: 0 / 0
16.06.2020, 11:53
    #39969688
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
petrav
mayton,
...
Вот я всё думаю: они правду сказали или набрехали.
Если нейронная сеть способна различить на картинке кошака, то почему бы не посчитать кол-во успешных итераций?
...
Рейтинг: 0 / 0
16.06.2020, 13:39
    #39969742
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
petrav
mayton,

Обучение без учителя. Как-то Гугл рапортовал, что их нейронная сеть, которую они учили кошек на фотках искать, научилась определять количество котов на фотах. При этом изначально такой функции (определения количества) в нейро-сеть заложено не было. Т.е. нейро-сеть самостоятельно вывела новый смысл, проявила себя творческим исследователем. Вот я всё думаю: они правду сказали или набрехали.

Конечно набрехали. Я щас изготовлю фрактального кота или кота-в-коте и посмотрю сколько котов эта сеть там насчитает.

Вообще все нейро-сетевые постановки - они не про 100% достоверность а про вероятность того что данный образец
принадлежит к классу. Это как поиск улик в преступлении. Одна улика - не играет роли но когда их набирается
какая-то критическая масса - то доказательство как-то асимтотически приближатеся к правде.
...
Рейтинг: 0 / 0
16.06.2020, 14:14
    #39969760
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
mayton
petrav
mayton,

Обучение без учителя. Как-то Гугл рапортовал, что их нейронная сеть, которую они учили кошек на фотках искать, научилась определять количество котов на фотах. При этом изначально такой функции (определения количества) в нейро-сеть заложено не было. Т.е. нейро-сеть самостоятельно вывела новый смысл, проявила себя творческим исследователем. Вот я всё думаю: они правду сказали или набрехали.

Конечно набрехали. Я щас изготовлю фрактального кота или кота-в-коте и посмотрю сколько котов эта сеть там насчитает.

Ну... дело ведь не в том что бы обмануть НС. Человеческое зрение и восприятие тоже можно обмануть. Любой политик делает это штатно согласно своим "обязанностям". Дело в том, что гугловцы утверждают, что их НС сама собой вывела новый смысл, родила-разработала понятие "количество", которое не закладывалось людьми при проектировании НС. А это уже заявка на Интеллект.
...
Рейтинг: 0 / 0
16.06.2020, 14:17
    #39969762
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
petrav
mayton
пропущено...

Конечно набрехали. Я щас изготовлю фрактального кота или кота-в-коте и посмотрю сколько котов эта сеть там насчитает.

Ну... дело ведь не в том что бы обмануть НС. Человеческое зрение и восприятие тоже можно обмануть. Любой политик делает это штатно согласно своим "обязанностям". Дело в том, что гугловцы утверждают, что их НС сама собой вывела новый смысл, родила-разработала понятие "количество", которое не закладывалось людьми при проектировании НС. А это уже заявка на Интеллект.

Давай вернемся в новости. Нейросеть выдала чуть больше информации чем ожидалось.

А что она вообще выдает? Она-же не текстом пишет - "Я нашла двух котов" верно?
...
Рейтинг: 0 / 0
17.06.2020, 05:54
    #39970016
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
я вообще новичок во всех этих нейросетевых делах, но мне казалось, что нейросеть это как раз такая штука, которая отгорожена от "дополнительного интеллекта" на уровне принципа деятельности. Т.е. как я её понимаю: НС это такая штука, которой скармливают кучу информации (обучение), потом дают некоторые входные данные, по которым она делает вывод на основе имеющихся данных. Грубо говоря, пытается подогнать новые данные под старые. Как тут можно получить новую информацию, которая будет выходить за рамки старой?
...
Рейтинг: 0 / 0
17.06.2020, 11:28
    #39970098
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
CEMb
я вообще новичок во всех этих нейросетевых делах, но мне казалось, что нейросеть это как раз такая штука, которая отгорожена от "дополнительного интеллекта" на уровне принципа деятельности. Т.е. как я её понимаю: НС это такая штука, которой скармливают кучу информации (обучение), потом дают некоторые входные данные, по которым она делает вывод на основе имеющихся данных. Грубо говоря, пытается подогнать новые данные под старые. Как тут можно получить новую информацию, которая будет выходить за рамки старой?

Так в этом то и состоит мой вопрос. :) Впрочем, возможно, Гугл такого не говорил. Может быть это о5 новость от журналистов в стиле "учёный изнасиловал журналиста и путешествовал в будущее". Как в анекдоте.
...
Рейтинг: 0 / 0
17.06.2020, 13:18
    #39970157
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
В мире большой науки - практически нет сенсаций. Там - долгий упорный труд. Публикации.
И плавное последовательное вхождение в новый закон.

В мире математики к диф-исчислению шли одновременно Ньютон и Лейбниц. И вопрос авторства или перво-открывания
например был просто вопросом даты публикации. И вообще в физике например законы резко
не появляются. Они - витают в воздухе и большинство физиков их знали. Цена вопроса
была просто в том кто возьмет на себя право их озвучить.

Так-же нейронная сеть (скорее всего это свёрточная (convolution)) которая обладает
абсолютным параллелизмом по всем слоям - может найти двух котов на картинке
если просто применить fork-join к верхней части картинки и к нижней. Банальная
ситуация. И журналисты жёлтых изданий как всегда ничего не поняли и напечатали
сенсацию.

Офигеть! Оказывается fork-join по матрице слоёв сверточной сети может найти двух котов!
Можно было того-же журналиста потролить и найти 4х и 8х котов.
...
Рейтинг: 0 / 0
17.06.2020, 16:48
    #39970286
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
mayton
И вопрос авторства или перво-открывания например был просто вопросом даты публикации.
И вообще в физике например законы резко не появляются. Они - витают в воздухе и большинство физиков их знали
... но кровавая гэбня всё скрыла?
Может, хватит уже пороть ахинею по поводу и без?
...
Рейтинг: 0 / 0
17.06.2020, 16:52
    #39970290
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
Я ничего не говорил про гебню. И что это за термины такие?
...
Рейтинг: 0 / 0
17.06.2020, 17:38
    #39970310
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
"Гэбня" и "сокрытие" уже стали мемами, обозначающими всяческую ахинею.
Это такой толстый намёк, что в физике вы не разбираетесь, а ваши идеалистические представления о науке - несколько неадекватны.
В качестве пруфа сошлюсь на мнение известного советского астронома Иосифа Самуилович Шкловского.
В своей книге "Звёзды: их рождение, жизнь и смерть" он приводит длинную цитату не менее известного учёного - американского физика и профессора астрономии Мартина Шварцильда:
перепечатано с бумажного изданияЕсли Вселенная управляется простыми универсальными законами, то разве чистое мышление оказалось бы не способным открыть эту совокупность законов? Тогда не нужно было бы опираться на наблюдения, которые приходится производить с таким трудом.
Хотя законы, которые мы стремимся открыть, быть может, и совершенны, но человеческий разум далёк от совершенства: представленный самому себе он склонен заблуждаться, чему мы видим печальное подтверждение среди бесчисленных примеров прошлого.
Действительно, мы очень редко упускали возможность впасть в заблуждение; только новые, полученные из наблюдений данные, с трудом отвоёванные у природы, возвращали нас на правильный путь.
В теории эволюции звёзд они особенно необходимы, чтобы двигаться вперёд, не впадая в серьёзные ошибки ...
Если вы приведёте пример какого-нибудь, "витавшего в воздухе" физического закона, то, если я сочту собственную квалификацию достаточной - можно будет разобрать этот пример.
...
Рейтинг: 0 / 0
17.06.2020, 17:53
    #39970318
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничный Кохонен.
Закон Ньютона.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничный Кохонен. / 25 сообщений из 107, страница 1 из 5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]