Заблокирован
1

Что такое нейросеть и как ее сделать?

12.03.2020, 05:46. Показов 659. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Я давно хотел где-нибудь спросить, как можно на C++ создать программу, которую называют "нейросеть" (хотя, к нейросети она никакого отношения не имеет). И я хочу спросить, что же называют словом "нейросеть", потому что я так и не понял, что.
Словом нейросеть, как я понял, называют программу вида
C++
1
2
3
int i[10][10];//массив "обученной" нейросети
int z[10];//массив входных данных для проверки. 
for (int k=0; k<10; k++) for (int h=0; h<10; h++) if(z[h]<i[k][h]) z[h]=-1;//неверные данные;
я не говорю, что пример выше - это нейросеть. Это вообще я только что придумал (и с ошибками). Просто элементы нейросети очень напоминают этот пример...
У них внутри алгоритм вроде
C++
1
2
3
4
5
int i=-100;
int j=0;
bool b=0;
if(i>j) b=true;
else b=false;
или
C++
1
2
3
4
5
int i=-100;
int j=0;
int b=0;
if(i>j) b=1;
else b=-1;
Т.е. он бессмысленный вообще.
А мне нужна такая нейросеть, чтобы она хоть немного напоминала человеческую (может много хочу). Т.е. без бессмысленных операций.
Где такую найти? Как ее сделать?

Добавлено через 1 час 23 минуты
Мне бы таку нейросеть.
Есть, допустим, тысячу изображению людей. И надо найти последовательность, по которой эти лица выстраиваются. Дальше длиннопост. Но вот есть идея что-то подобное сделать, плиз подскажите.
Кликните здесь для просмотра всего текста

Внимание весь код с ошибками и написан не для практической реализации, а лишь для построения идеи! Код с ошибками, тяжелый и сложный для психики.
Пусть изображение каждое имеет 100*100 пикселей, черно-белое и представлено в виде массива
C++
1
bool image[100][100];
Соответственно, "0" означает белый цвет, а "1" - черный цвет.
Для того, чтобы узнать последовательность строения изображений, необходимо создать массив последовательностей:
C++
1
2
3
4
5
6
7
8
9
10
11
strcut coord
{
   int x;
   int y;
   int set0(void){x=0; y=0};
};
strcut posl
{
   coord position[100][100];//каждый елемент массива содержит координаты черных точек
   //считается, что последовательность начинается с 1 и заканчивается 100000
};
Затем необходимо создать столько же последовательностей, сколько и изображений:
C++
1
2
3
4
5
6
7
struct image
{
   bool img[100][100];
};
int x=1024;//количество изображений
image *images=new images[x];
posl *p=new posl[x];
Затем необходимо создать среднюю арифметическую последовательность:
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
posl middlep;
posl otkl[2];//последовательность минимальных и максимальных отклонений от средней
for (int i=0; i<100; i++) for (int k=0; k<100; k++) {middlep.position[i][k].set0(); otkl[0].position[i][k].set0(); otkl[1].position[i][k].set0();}//обнуление
 
for(int s=0; s<x; s++)//x - количество изображений и последовательностей
   for (int i=0; i<100; i++)
      for (int k=0; k<100; k++)
      {
        middlep.position[i][k].x=(middlep.position[i][k].x+p[s].postion[i][k].x)/2;
        middlep.position[i][k].y=(middlep.position[i][k].y+p[s].postion[i][k].y)/2;
      }
 
for(int s=0; s<x; s++)//x - количество изображений и последовательностей
   for (int i=0; i<100; i++)
      for (int k=0; k<100; k++)
      {
        if(otkl[0].position[i][k].x>p[s].postion[i][k].x) otkl[0].position[i][k].x=p[s].postion[i][k].x;
        if(otkl[0].position[i][k].y>p[s].postion[i][k].y) otkl[0].position[i][k].y=p[s].postion[i][k].y;
      }
 
 
for(int s=0; s<x; s++)//x - количество изображений и последовательностей
   for (int i=0; i<100; i++)
      for (int k=0; k<100; k++)
      {
        if(otkl[1].position[i][k].x<p[s].postion[i][k].x) otkl[1].position[i][k].x=p[s].postion[i][k].x;
        if(otkl[1].position[i][k].y<p[s].postion[i][k].y) otkl[1].position[i][k].y=p[s].postion[i][k].y;
      }
Теперь, "middlep" представляет собой массив среднего арифметического последовательностей, "otkl[0]" - наименьшего отклонения и "otkl[1]" - наибольшего отклонения.
Теперь по массиву middlep, otkl[0], otkl[1] можно собирать рандомно сгенерированные изображения, эдакий генератор лиц из пары строк кода.
А забыл еще. Надо преобразовать изображения в последовательность:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct image
{
   bool img[100][100];
}
strcut coord
{
   int x;
   int y;
   int set0(void){x=0; y=0};
};
strcut posl
{
   coord position[100][100];//каждый елемент массива содержит координаты черных точек
   //считается, что последовательность начинается с 1 и заканчивается 100000
};
posl gen(image i)
{
   posl ret;
   for (int a=0; a<100; a++)
      for (b=0; b<100; b++) if (i.img[a][b]==1) {ret.position[a][b].x=b; ret.position[a][b].y=a;} else {ret.position[a][b].x=-2; ret.position[a][b].y=-2;// нет позиции
   }
   return ret;
}
Ну и генерация, по среднему арифметическому и с отклонениями для разнообразий
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
image gen_img(posl middle, post otkl1, posl otkl2)
{
   image ret;
   posl randp;
   for (int a=0; a<100; a++) for (b=0; b<100; b++) randp.position[a][b].set0();//обнуление
   for (int a=0; a<100; a++)
         for (int b=0; b<100; b++)
            {
                while(true)//работает до break;
                {
                   randp.position[a][b].x=crand()%middle.position[a][b].x;//генерируем рандомное изображение. 
                   randp.position[a][b].y=crand()%middle.position[a][b].y;
                  
                   if(randp.position[a][b].x<otkl1.position[a][b].x) меньше минимального отклонения
                        randp.position[a][b].x=crand()%otkl2.position[a][b].x;//генерируем заново
                   
                   if(randp.position[a][b].y<otkl1.position[a][b].y) меньше минимального отклонения
                        randp.position[a][b].y=crand()%otkl2.position[a][b].y;//генерируем заново
 
                   if(randp.position[a][b].x>otkl1.position[a][b].x) больше максимального отклонения
                        randp.position[a][b].x=crand()%middle.position[a][b].x;//генерируем заново
 
                    if(randp.position[a][b].y>otkl1.position[a][b].y) больше максимального отклонения
                        randp.position[a][b].x=crand()%middle.position[a][b].x;//генерируем заново
 
 
                     if(randp.position[a][b].x>=otkl1.position[a][b].x&&randp.position[a][b].x<=otkl2.position[a][b].x&&randp.position[a][b].y>=otkl1.position[a][b].y&&randp.position[a][b].y<=otkl1.position[a][b].y) break;
                 }
                   //если позиция прошла
                  
                   ret.img[randp.position[a][b].x][randp.position[a][b].y]=1;//задаем 1, черный цвет
             }
 
       return ret;
                        
 
   
}

Короче мне надо "нейросеть" типо вот такой как я написал. С ошибками, но надеюсь, что идея понятна. Т.е. брать кучу изображений и кучу последовательностей и в каждую последовательность должна вписываться первая по счету координата черной точки, вторая и т.д. Таким образом, можно выяснить местонахождение черных точек. А потом сделать среднее арифметическое каждой координаты. Взять минимальную координату точки и максимальную. И по этому генерировать изображения. Вот.
P.s. Пока я это писал крыша уже наверно поехала я сам не пойму что же я написал. Так что извиняйте за такое грубое неуважение. Но может среди Вас найдется телепат, который угадает идею.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2020, 05:46
Ответы с готовыми решениями:

Я хочу сделать программу - чат. Что б обмениваться сообщениями. Как такое сделать? Какой код?
Если можно то с объяснениями пожалуйста. На языке с ++

Код не работает,говорит,что не знает,что такое delay(100).в чём проблема?как сделать,чтоб программа заработала?
#include &lt;graphics.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include...

Как показать во что преобразует многомерный вектор нейросеть?
Для функции двумерного нормализованного вектора z=f(A,B) по X строим A по Y строим B по Z...

Как можно сделать такое? (Автоматическое нажатие клавиш и все что с этим связанно)
У меня возник вопрос как можно сделать чтоб программа автоматически нажимала на определенные...

3
1485 / 1412 / 240
Регистрация: 19.02.2010
Сообщений: 3,913
12.03.2020, 12:12 2
Цитата Сообщение от Vitserduch Посмотреть сообщение
И я хочу спросить, что же называют словом "нейросеть", потому что я так и не понял, что.
См часть 4 тут https://vas3k.ru/blog/machine_learning/
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
12.03.2020, 12:21 3
Мне кажется, я угадал основную идею. Надо чтобы можно было грабить корованы и чтобы домики набигали. Придется джва года ждать такую нейросеть.
0
2523 / 1243 / 459
Регистрация: 08.11.2016
Сообщений: 3,412
12.03.2020, 12:46 4
_Ivana, а когда дождемся - обмазаться ею ))
0
12.03.2020, 12:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2020, 12:46
Помогаю со студенческими работами здесь

Как такое проделать с мемо? или что подходит под такое?
Привет всем! Как сделать такое? и на чем лучше мемо,листбокс.... или просто как вставить...

Как такое может быть и что это такое?
в маленьком превью одна картинка, открываешь совершенно другая (какая и должна быть) с чем это...

Что такое квантовый бит и, как следствие, что такое квантовый компьютер
Здравствуйте! Может ли кто-нибудь объяснить что такое квантовый бит, и, как следствие, что такое...

Что это такое и как это можно сделать?
Это что то из стандартных компонентов или как в своем проекте сделать что то подобное? ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru