Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Технологии > Общие вопросы по программированию, компьютерным наукам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Excel VBA, CAD, Софт, ОС, Windows, Ubuntu, Android, VPS
Win Api, Assembler, C++, Java, Pascal, Lazarus, Delphi, OpenGL, DirectX
C#, Qt, .NET, ASP.NET, Windows Forms, ADO.NET, Framework, WPF, UWP, WinRT, XAML
HTML, CSS, JavaScript, Ajax, PHP, Perl, Python, Ruby, SQL, WordPress, API, XML, JSON, ActionScript, Flash

Ответ
 
Опции темы
Старый 07.01.2017, 12:15   #1
Михаил22042016
Форумчанин
 
Регистрация: 21.04.2016
Сообщений: 54
Репутация: 33
Смущение Нейросети. Хочу разобраться в этом деле

всем здрасти, надеюсь тут есть живые люди...

delphi язык

я много слышал про Нейросети, много читал, статьи, в том числе и хабрахабр, кторый на этом форуме людям ссоветуют читать, когда решил что созрел для первого опыта заплил то, что я думал Нейросетью является (во вложении исходник). ОНО работает, ловко распазнает буквы которые я рисую на битмапе, ну функцию обучения или запоминания новых символов я не делал... потому как наткнулся на пару исходников Нейросети,т.е. я понял что я слепил хрень...
исходники без пояснений поэтому нихрина не понятно, куча трехмерных массивов, всяких переменных. я думал все проще, такой и код у меня, простой(во вложении исходник будет).

Хочу разобраться в этом деле, оказывается все те статьи что я читал, меня лишь запутали, эти аксоны, дендриты, синопсы. муть голубая...
я уже после просмотра исходников из НЭТа, смотрел на свой код и гадал что там синопс что дендрит и каких еще отростков там не хватает
короче я совсем запутался, нужно распутаться, помогите пожалуйста понять что к чему
я был бы оч признателен
за например- код на трехслойную сеть, по три нейрона на слой с пояснениями, просто чтобы понимать, для дальнейшего развития. копи паст меня не интересует, хочу понимать.
НУ ИЛИ ХОТЯБЫ РАСПИСАТЬ ЧТО ЗА ПЕРЕМЕННЫЕ в примере ниже что за что отвечает

вот к примеру один кусок исходника:
Код:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
             ...
             ...
    Timer2: TTimer;
     procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button8MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Timer2Timer(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
 
 buk:array [1..33] of tbitmap; // тут понятно 33 битмапа соответственно для 33 нейронов
  i:integer;                           // тут НЕ понятно, нафига оно нужно, нигде не используется, в каждой функ, своя объявлена
  nerv:array [1..33] of real;    //а вот тут сомнения, сами ниероны?
  w,dw:array [1..150,1..150,1..33] of real;   // а что тогда вот ЭТО трехмерный 150,150,33. последнее соответствует кол-ву  nerv что тогда 150,150 ??????
  v:array [1..150,1..150] of real;   // ну и это???  что это, зачем :confused:
  N:real;
  size: integer;
  t: integer;


procedure initweights;

var
  but: boolean;

тут исходник весь Unit1.rar
собствеено, суть такого количества всех данных не ясна, если в принципе один неирон может получить картинку на вход сравнить выдать 0 или 1 на выход второму неирону, а а он третьему, а он 4му....
как передача 0 или 1 из рук в руки может влиять на на ответ сетки. бла бла бла я сошол с ума
направьте на путь истиный
___________________________________ ___________________________________ _______________
прога должна лежать в одной папке с папкой мемо для работы, из мемо грузится память нейрона
UAmoba.rar
Memo.rar

Последний раз редактировалось Михаил22042016; 08.01.2017 в 09:40.
Михаил22042016 вне форума   Ответить с цитированием
Старый 08.01.2017, 09:18   #2
Михаил22042016
Форумчанин
 
Регистрация: 21.04.2016
Сообщений: 54
Репутация: 33
По умолчанию

чтоли нет людей шарящих?
хотябы переменнве расписать
типа так
Код:

buk:array [1..33] of tbitmap; // это память неиронов
  i:integer;                           // 
  nerv:array [1..33] of real;    //это сами неироны котор, данные в этом массиве зависят от ....
  w,dw:array [1..150,1..150,1..33] of real;   // а  тото тото каждая ячека связана , зависит от..
  v:array [1..150,1..150] of real;   //  аэто тото тото связано , зависит от..
  N:real;          //      аэто 
  size: integer;//  аэто 
  t: integer;//  аэто

и что тут синоп аксон

Последний раз редактировалось Михаил22042016; 08.01.2017 в 09:42.
Михаил22042016 вне форума   Ответить с цитированием
Старый 09.01.2017, 17:51   #3
Михаил22042016
Форумчанин
 
Регистрация: 21.04.2016
Сообщений: 54
Репутация: 33
По умолчанию

начал пилить
Код:

type
  PixelRGB = packed record b,g,r: byte; end;
  tXarray = array[0..0] of PixelRGB;
  Xarray = ^tXarray;
  YXarray = array of Xarray;
Type
 TNeuron = Record            // Нейрон.         tbitmap
  input: Array of Array of real;        // Входы нейрона - В случае входного нейрона: input=output.
                                        //В остальных, в поле input попадает суммарная информация
                                        //всех нейронов с предыдущего слоя, после чего, она нормализуется,
                                        // с помощью функции активации (пока что просто представим ее f(x))
                                        // и попадает в поле output.
  output : Array of Array of real;        // Массив весовых коэффициентов нейрона.
  sinopsW: Array of Array of real;       // Массив изменений весов нейрона.- Синапс это связь между двумя нейронами. У синапсов есть 1 параметр — вес.
  sigma: real;             // Ошибка нейрона.
  OutN: real;              // Выход нейрона.    Для выходного слоя
  ko: Real;                    // коэфициент крутизны сигмоида (обычно от 0.1 до 1.5)
  e: Real;                     // скорость обучения. (обычно от 0.01 до 0.9)
 end;
  TX = Array of TNeuron;     // Массив нейронов В слое.  {строка}
  YxX= Array[0..2] of TX;          // Массив слоев             {столбец}
  Procedure SetIn(inBM:TBitmap);
 var
 Setb: YxX; // Setb[y,x].X:=0;  y-№ слоя, x-№ нейрона

implementation

uses
  Unit1;

Procedure SetIn(inBM:TBitmap); // Подача ВХОДных данных на ВХОДной слой.
var x,y,z:Integer; Skan:YXarray;
//    Skan - карта бит РГБ для быстрого доступа
begin
  inBM.PixelFormat:=pf24bit;
  SetLength(Skan,inBM.Height);
  SetLength(Setb[0],5); // размер ВХОДного слоя - 5 нейронов
  SetLength(Setb[1],33); // размер скрытого слоя - 33 нейронов
  SetLength(Setb[2],1); // размер ВЫходного слоя - 1 нейронов
  for z := 0 to inBM.Height-1 do  //перебор строк TBitmap для ScanLine
  Skan[z]:= inBM.ScanLine[z];
  for z := 0 to Length(Setb[0])-1 do
  begin // перебор нейронов слоя - ВХОДного
    SetLength(Setb[0,z].sinopsW,inBM.Height,inBM.Width); // уст. размер массива sinopsW, число связей, приходящих в нейрон
    for y := 0 to inBM.Height-1 do  //  перебор пикселей по Y
    begin
      for x := 0 to inBM.Width-1 do  // перебор пикселей по X
      begin
        Setb[0,z].sinopsW[y,x]:=(Skan[y,x].r+Skan[y,x].g+Skan[y,x].b)/3;
тут наверно можно было сразу все значения присваивать на Setb[0,z].output[y,x] ???
      end;
    end;
  end;
end;

блин...
если надо алфавит распазновать то входной слой должен быть 33 нейрона?
... переделывать...
а каким размером тогда должен быть второй слой
и следующий скок их вообще надо

Последний раз редактировалось Михаил22042016; 09.01.2017 в 20:33.
Михаил22042016 вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решить задачку по VBA. Есть же специалисты в этом деле. Nfdjyzycrfz Помощь студентам 0 25.03.2012 15:50
Помогите. Хочу разобраться PEHAT Помощь студентам 2 13.05.2009 21:19




01:49.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru