Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
MASTA 23
0 / 0 / 1
Регистрация: 23.03.2014
Сообщений: 28
1

Написать простейшую нейронную сеть

13.11.2016, 20:48. Просмотров 1571. Ответов 17
Метки нет (Все метки)

Помогите с заданием, пожалуйста.
Написать алгоритм реализующий работу нейрона МакКаллока-Питтса сигмоидальной функции активации. Количество входов нейрона равно 3.
На любом языке. Предпочтительнее всего - С++.
Собственно, мне бы хотя бы объяснить алгоритм, ибо не знаю даже с какой стороны подходить.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2016, 20:48
Ответы с готовыми решениями:

Создать нейронную сеть
Доброе время суток! Нейрон - это класс? Типо это нейронная сеть или нет ...

Поправте нейронную сеть)))
Я программу вродь как написал, хотел попросить посмотреть, правильно ли я вобще...

Распознавание звука через нейронную сеть
Всем привет. Собственно, сабж. Тема, на мой взгляд, чрезвычайно сложная и я...

Помогите написать простейшую программу!!!
Я навичок в програмирование... Помогите написать программу : Передать в...

Помогите написать простейшую программу
Доброго времени суток! Помогите пожайлуста написать простую программу на С++,...

17
VTsaregorodtsev
13.11.2016, 22:28
  #2

Не по теме:

нейрон МакКаллока-Питтса и сигмоидальная функция активации - вещи несовместимые ;)
Вернее, называться нейрон должен по-другому (и не только называться - но и быть другим).
Видимо, учебник - бред, а автор учебника - малокомпетентен.
И разбираться в фантазиях препода (что же ему на самом деле нужно) - нет желания, тем более, через "испорченный телефон" в виде студента ;)

0
Eva Rosalene
T for Trans-
4050 / 1589 / 303
Регистрация: 06.01.2013
Сообщений: 4,182
Завершенные тесты: 2
13.11.2016, 23:08 3
Лучший ответ Сообщение было отмечено Eva Rosalene как решение

Решение

Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
нейрон МакКаллока-Питтса и сигмоидальная функция активации - вещи несовместимые
С чего бы это? Сначала суммируем взвешенные входы:
http://www.cyberforum.ru/cgi-bin/latex.cgi?u = \sum_{i = 1}^n w_ix_i + w_0x_0
Потом прогоняем через функцию активации, которая может быть любой. Например, логистическая, которая и даст нам сигмоид на выходе:
http://www.cyberforum.ru/cgi-bin/latex.cgi?f(x) = \frac{1 - e^{-x}}{1 + e^{-x}}

На C++ это может быть формализованно вот так:

C++
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
class Neuron {
   const size_t inp_count;
    
   std::vector<double> weights;
   std::vector<double> inputs;
    
   double t;
   
   mutable bool precached;
   mutable double cache;
    
   [[noreturn]] void index_out( ) const {
       throw std::invalid_argument("Index out of bounds"); 
   }
public:
    Neuron(size_t size): inp_count(size), precached(false) {
        weights.resize(inp_count, 0);
        inputs.resize(inp_count, 0);
    }
    
    Neuron(const std::vector<double>& w): inp_count(w.size( )), weights(w), precached(false) {
        inputs.resize(inp_count, 0);
    }
    
    void set_slope(double s) {
        t = s;
    }
    
    void set_weight(size_t index, double w) {
        if (index > inp_count) index_out( );
        weights[index] = w;
        precached = false;
    }
    
    void set_input(size_t index, double i) {
        if (index > inp_count) index_out( );
        inputs[index] = i;
        precached = false;
    }
    
    double get_weight(size_t index) const {
        if (index > inp_count) index_out( );
        return weights[index];
    }
    
    double get_input(size_t index) const {
        if (index > inp_count) index_out( );
        return inputs[index];
    }
    
    size_t get_input_count( ) const {
        return inp_count;
    }
    
    double get_output( ) const {
        if (precached) return cache;
        
        double sum = 0;
        for (int i = 0; i < inp_count; ++i)
            sum += weights[i] * inputs[i];
        
        cache = (1. - exp(-sum * t)) / (1. + exp(-sum * t));
        precached = true;
        return cache;
    }
};
http://rextester.com/PZKF60852
1
MASTA 23
0 / 0 / 1
Регистрация: 23.03.2014
Сообщений: 28
13.11.2016, 23:53  [ТС] 4
Выбивает ошибку в 19 строке. Из-за чего вслед за ней еще 21. Собственно застряла на этом моменте, когда начала разбирать код
0
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
13.11.2016, 23:57 5
Цитата Сообщение от MASTA 23 Посмотреть сообщение
Выбивает ошибку в 19 строке.
Это из-за того, что там фигурная скобка не тем шрифтом написана.
0
MASTA 23
0 / 0 / 1
Регистрация: 23.03.2014
Сообщений: 28
14.11.2016, 00:09  [ТС] 6
Как вы это увидели? магия какая-то
а каким надо? заменила всех фигурные скобки реплейсом на всякий пожарный, но эффекта никакого не дало.
0
Eva Rosalene
T for Trans-
4050 / 1589 / 303
Регистрация: 06.01.2013
Сообщений: 4,182
Завершенные тесты: 2
14.11.2016, 00:25 7
Цитата Сообщение от MASTA 23 Посмотреть сообщение
Выбивает ошибку в 19 строке.
Цитата Сообщение от castaway Посмотреть сообщение
Это из-за того, что там фигурная скобка не тем шрифтом написана.
R u serious?

Просто стандарт C++11, [[noreturn]] ровно оттуда.
0
MASTA 23
0 / 0 / 1
Регистрация: 23.03.2014
Сообщений: 28
14.11.2016, 00:31  [ТС] 8
Видимо, старый и простенький ДевСи такого еще не знает. Не подскажите, в какой среде и версии этот код запустится?
0
Eva Rosalene
T for Trans-
4050 / 1589 / 303
Регистрация: 06.01.2013
Сообщений: 4,182
Завершенные тесты: 2
14.11.2016, 00:48 9
MASTA 23, любой компилятор C++11 и выше. А среда и вовсе любая, главное этот компилятор подключить. В Code::Blocks полёт нормальный
0
MASTA 23
0 / 0 / 1
Регистрация: 23.03.2014
Сообщений: 28
14.11.2016, 01:08  [ТС] 10
Поставив Код Блокс (последняя версия) столкнулась с той же ошибкой. Теперь вопрос в том, какой компилятор мне нужен, а точнее, где его можно взять и как подключить?
0
Eva Rosalene
T for Trans-
4050 / 1589 / 303
Регистрация: 06.01.2013
Сообщений: 4,182
Завершенные тесты: 2
14.11.2016, 01:37 11
MASTA 23, просто в настройках включите C++11
0
Миниатюры
Написать простейшую нейронную сеть  
MASTA 23
0 / 0 / 1
Регистрация: 23.03.2014
Сообщений: 28
14.11.2016, 01:45  [ТС] 12
Да, так и сделала, и почему то все равно - ошибка. Кстати, в онлайн компиляторах с поддержкой с++11 также эта же ошибка появляется.
0
Eva Rosalene
T for Trans-
4050 / 1589 / 303
Регистрация: 06.01.2013
Сообщений: 4,182
Завершенные тесты: 2
14.11.2016, 01:47 13
MASTA 23, а покажите скрины.
0
MASTA 23
0 / 0 / 1
Регистрация: 23.03.2014
Сообщений: 28
14.11.2016, 01:54  [ТС] 14
Не знаю, как вы это сделали одним сообщением, ну или я сделала перезагрузкой компа, но запускается, ура! Теперь буду разбираться, что к чему, спасибо большое!
0
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
14.11.2016, 07:37 15
FraidZZ, no.
0
VTsaregorodtsev
16.11.2016, 21:36
  #16

Не по теме:

Цитата Сообщение от FraidZZ Посмотреть сообщение
Потом прогоняем через функцию активации, которая может быть любой. Например, логистическая, которая и даст нам сигмоид на выходе
С какого перепугу она у нейрона Маккаллока-Питтса может быть любой? Она там всегда была пороговой.

0
Eva Rosalene
16.11.2016, 23:35
  #17

Не по теме:

Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Она там всегда была пороговой.
Вот мне и интересно, откуда вы это взяли.

0
VTsaregorodtsev
17.11.2016, 00:44     Написать простейшую нейронную сеть
  #18

Не по теме:

ОК, найдите непороговую (вернее, любую - там даже пороговой функции не нужно, ибо идут логические операции) функцию в статье М-П. Она в русском переводе есть - в той же "Нейронные сети: история развития теории" в серии книг у Галушкина, недавно вроде книга эта переиздана.
И найдите обзывания всех иных нейронов (начиная с обучаемых пороговых в персептроне, Адалине - и заканчивая сигмоидными нейронами) нейронами М-П в работах истинных АВТОРОВ (а не пересказчиков) - начиная от Розенблатта, Уидроу и т.д. На русскую википедию ссылаться при этом не нужно ;)
Да - "биологически-правдоподобные" нейроны типа integrate and fire брать во внимание тоже не нужно, тем более, что эта модель за 40 лет до нейронов М-П была предложена.
Т.е. есть исходная забугорная линия развития в виде ряда знаковых работ (их переводы - разрешаю использовать, пересказ - уже нет) - покажите, что в ней нейронами М-П называются нейроны с сигмоидной нелинейностью.

0
17.11.2016, 00:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2016, 00:44
Привет! Вот еще темы с ответами:

Написать простейшую программу робота-пылесоса с графической средой, интерфейсом и датчиками пространстваи загрязненности
Помогите пожалуйста написать, задали такой ужас на 2 семестре 1 курса, знаний...

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

Написать простейшую программу по "перегрузке" и "наследованию"
написать простейшую программу на СИ++ по &quot;перегрузке&quot; и &quot;наследованию&quot;. заранее...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru