Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нейронная сеть Хопфилда, реализация нейронной сети Хопфилда с++ 
:(
    Опции темы
Валерия123456
  Дата 16.6.2018, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.5.2018

Репутация: нет
Всего: нет



Нужно реализовать нейронную сеть Хопфилда на с++. Алгоритм в наипростейшем виде я реализовала. Теперь вопрос стоит в том как сделать так, чтобы образцы считывались с картинок или txt-файлов. Если кто-то будет готов помочь с этим, буду очень благодарна. Код, который имею на данный момент, прилагаю.
Код

#include <stdio.h>
#include <omp.h>
#include <iostream>
int main()
{
             int n = 3;
            int m = 4;//количесво нейронов
            int **mas = new int* [n];//образцы для обучения
             for (int count = 0; count < m; count++)
           mas[count] = new int [m];
            int *y = new int[m];
            mas[0][0] = -1; mas[0][ 1] = 1; mas[0][ 2] = -1; mas[0][ 3] = 1;
            mas[1][ 0] = 1; mas[1][ 1] = -1; mas[1][ 2] = 1; mas[1][ 3] = 1;
            mas[2][ 0] = -1; mas[2][1] = 1; mas[2][2] = -1; mas[2][ 3] = -1;
            int i = 0, j = 0;
            std::string s = "";
            int **w = new int* [m];//
            for (int count = 0; count < m; count++)
             w[count] = new int [m];
            int  **tm = new int*[m];//Временный массив
            for (int count = 0; count < m; count++)
           tm[count] = new int [m];
            int k = 0;
            //нахожу W
            for (k = 0; k < n; k++)
            {
              
                for (i = 0; i < m; i++)
                    for (j = 0; j < m; j++)
                        tm[i][j] = mas[k][i] * mas[k][j];
                //нахожу сумму tm[i]
                for (i = 0; i < m; i++)
                    for (j = 0; j < m; j++)
                        w[i][j] += tm[i][j];
            }
            //Обнуляю главную диагональ w
            for (i = 0; i < m; i++) 
                w[i][i] = 0;
            int *a = new int[m];//ф-ия активации
            bool b = false; k = 0;//Счётчик
            int l = -1;//Индекс подходящей строки
            while (!b && k < 200)
            {
                //Вычисляю y'
                for (i = 0; i < m; i++)
                    for (j = 0; j < m; j++)
                        a[i] += w[i][j] * y[j];
                //Обрабатываю y' ф-ей активации
                for (i = 0; i < m; i++)
                    if (a[i] >= 0) a[i] = 1;
                    else a[i] = -1;
                //Сравниваю
                bool st = false;
                for (i = 0; i < n; i++)
                {
                    st = true;
                    for (j = 0; j < m; j++)
                        if (mas[i][ j] != a[j]) { st = false; break; }
                    if (st) { l = i; break; }
                }
                if (l != -1) b = true;
                else
                {
                    k++;//Увеличиваю счетчик
                    //Обновляем у'
                    for (i = 0; i < m; i++)
                        y[i] = a[i];
                    //Обнуляем a
                    for (i = 0; i < m; i++)
                        a[i] = 0;
                }
            }
            if (l != -1)
            {
 
                printf("clones with X = %i", (l + 1));
            }
            else
            {
                printf("no clones");
 
            }
            system("PAUSE");
            
        }

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1058 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.