purebasic.info

PureBasic forum
Текущее время: Пт авг 23, 2019 1:01 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Что за глюк с памятью?
СообщениеДобавлено: Сб июл 20, 2019 3:02 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 880
Благодарил (а): 2 раз.
Поблагодарили: 42 раз.
Пункты репутации: 9
С трюмя созданными слоями всё ок
а с четвёртым память отказывается чиститься. :roll:
Код:
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
EnableExplicit
 
 
Structure neiroset
adresneiroseti.i
kolsloev.i
kolishestvo_neironov.i
EndStructure
 
Structure sloy
  idsloy.i
  kolihestvoneironov_sloy.i
  adrespervogoneirona.i
EndStructure
 
 
Structure neiron
  dannye_neirona.f
  wes_neirona.f
  idneirona.i
EndStructure
 
 
 
 
 
 
Procedure FreeNeiroset(*neiroset.neiroset)
Protected i.i
Protected *sloy.sloy
  If *neiroset\kolsloev>0;значит выделялась память под сетку минимум с одним слоем
    *sloy.sloy=*neiroset\adresneiroseti
   ; For *sloy.sloy=*neiroset\adresneiroseti To *sloy.sloy+*neiroset\kolsloev*12-12 Step 12;удаляем память нейронов в слоях
      ;*sloy.sloy+(i*12);берём адрес нейронов слоя
    i=*sloy.sloy+*neiroset\kolsloev*12-12
  cikl:
   
   
      Debug "free adres sloy"
      Debug *sloy
     Debug *sloy\adrespervogoneirona
     ;Debug *sloy.sloy
      If *sloy\kolihestvoneironov_sloy>0 ;память выделена хотя бы под один нейрон
         
        Debug *sloy\kolihestvoneironov_sloy
 
        FreeMemory(*sloy\adrespervogoneirona)
      EndIf
    ;Next
      If *sloy.sloy<i
        *sloy.sloy+12
        Goto cikl
      EndIf
     
     
    Debug *neiroset\adresneiroseti
 
    FreeMemory(*neiroset\adresneiroseti);удаляем память от слоёв нейросети и обнуляем количество слоёв и общее количество нейронов
    *neiroset\kolsloev=0
    *neiroset\kolishestvo_neironov=0
  EndIf
EndProcedure
 
 
 
Procedure.i Sozdanie_sloy_neiroseti(*neiroset.neiroset,idsloy.i,kolihestvoneironov_sloy.i);слои по числовому порядку 0-1-2 или по id
  Protected i.i
  Protected *sloy.sloy
  Protected *neiron.neiron
 
 
  *neiroset\kolsloev+1
  *neiroset\kolishestvo_neironov+kolihestvoneironov_sloy
If *neiroset\kolsloev>1
  *neiroset\adresneiroseti=ReAllocateMemory(*neiroset\adresneiroseti,*neiroset\kolsloev*12);память под новый слой с нейронами
  If *neiroset\adresneiroseti>0;память успешно добавилась под новый слой
    *sloy.sloy=*neiroset\adresneiroseti+*neiroset\kolsloev*12-12;берём адрес добавляемого слоя
 
       
        Debug "reallok adres seti"
        Debug *neiroset\adresneiroseti
        ;Debug *sloy.sloy
      *sloy\idsloy=idsloy
      *sloy\kolihestvoneironov_sloy=kolihestvoneironov_sloy
    If kolihestvoneironov_sloy>0;если в слое создаётся хотя бы один нейрон
     *sloy\adrespervogoneirona=AllocateMemory(kolihestvoneironov_sloy*12)
     Debug "pervyiadres neironov"
     Debug *sloy\adrespervogoneirona
     If *sloy\adrespervogoneirona>0;память под нейроны выделена
     
      *neiron.neiron=*sloy\adrespervogoneirona
   
   
       For i=0 To kolihestvoneironov_sloy-1;записываем в id нейрона его иденфикацию по номерации от 1 и т.д.
        *neiron.neiron+(i*12)
        *neiron\idneirona=i+1
   
       
       Next
      Else
           Debug "error sdres neironov v 1 sloe"
           ProcedureReturn 0
      EndIf
    EndIf
     ProcedureReturn 1
       
       
       
       
       
 
    Else
    Debug "error adres sloy"
    ProcedureReturn 0
  EndIf
 
 
 
Else
  *neiroset\adresneiroseti=AllocateMemory(12);адрес первого слоя
  If *neiroset\adresneiroseti>0
    *sloy.sloy=*neiroset\adresneiroseti
    Debug "adres seti"
    Debug *neiroset\adresneiroseti
   
 
    *sloy\idsloy=idsloy
    *sloy\kolihestvoneironov_sloy=kolihestvoneironov_sloy
   If kolihestvoneironov_sloy>0;если в слое создаётся хотя бы один нейрон
     *sloy\adrespervogoneirona=AllocateMemory(kolihestvoneironov_sloy*12)
     Debug "pervyiadres neironov"
     Debug *sloy\adrespervogoneirona
     If *sloy\adrespervogoneirona>0;память под нейроны выделена
     
      *neiron.neiron=*sloy\adrespervogoneirona
   
   
       For i=0 To kolihestvoneironov_sloy-1;записываем в id нейрона его иденфикацию по номерации
        *neiron.neiron+(i*12)
        *neiron\idneirona=i+1
   
       
       Next
      Else
           Debug "error sdres neironov v 1 sloe"
           ProcedureReturn 0
      EndIf
    EndIf
     ProcedureReturn 1
  Else
    Debug "error sdres 1 sloy"
    ProcedureReturn 0
  EndIf
EndIf
 
EndProcedure
 
 
Procedure vvod()
EndProcedure
 
 
Global neiroset.neiroset
Sozdanie_sloy_neiroseti(@neiroset,1,5);idsloy,количество нейронов
Sozdanie_sloy_neiroseti(@neiroset,2,7)
Sozdanie_sloy_neiroseti(@neiroset,3,3)
Sozdanie_sloy_neiroseti(@neiroset,4,10)
 
 FreeNeiroset(@neiroset)



Последний раз редактировалось Сергейчик Сб июл 20, 2019 3:31 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Что за глюк с памятью?
СообщениеДобавлено: Сб июл 20, 2019 3:29 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 880
Благодарил (а): 2 раз.
Поблагодарили: 42 раз.
Пункты репутации: 9
Такая же муть с массивом. :roll:
Код:
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
 
EnableExplicit
 
 
 
Structure neiron
  dannye_neirona.f
  wes_neirona.f
  idneirona.i
EndStructure
 
 
Structure sloy
  idsloy.i
  kolihestvoneironov_sloy.i
  adrespervogoneirona.i
EndStructure
Global Dim sloy.sloy(0)
 
Structure neiroset
adresneiroseti.i
kolsloev.i
kolishestvo_neironov.i
EndStructure
 
 
 
 
 
 
 
Procedure FreeNeiroset(*neiroset.neiroset)
Protected i.i
Protected *sloy.sloy
  If *neiroset\kolsloev>0;значит выделялась память под сетку минимум с одним слоем
    ;*sloy.sloy=*neiroset\adresneiroseti
    For i=0 To *neiroset\kolsloev-1;удаляем память нейронов в слоях
 
 
   
   
      Debug "free adres sloy"
      Debug "iiii "+Str(i)
      Debug @sloy(i)
     Debug sloy(i)\adrespervogoneirona
     ;Debug *sloy.sloy
      If sloy(i)\kolihestvoneironov_sloy>0 ;память выделена хотя бы под один нейрон
         
        Debug sloy(i)\kolihestvoneironov_sloy
 
        FreeMemory(sloy(i)\adrespervogoneirona)
      EndIf
    Next
 
     
     
    Debug *neiroset\adresneiroseti
 
    ReDim sloy(0)
    *neiroset\kolsloev=0
    *neiroset\kolishestvo_neironov=0
  EndIf
EndProcedure
 
 
 
Procedure.i Sozdanie_sloy_neiroseti(*neiroset.neiroset,idsloy.i,kolihestvoneironov_sloy.i);слои по числовому порядку 0-1-2 или по id
  Protected i.i
  Protected *neiron.neiron
 
 
  *neiroset\kolsloev+1
  *neiroset\kolishestvo_neironov+kolihestvoneironov_sloy
  If *neiroset\kolsloev>1
    ReDim sloy(*neiroset\kolsloev-1)
  *neiroset\adresneiroseti=@sloy(0);ReAllocateMemory(*neiroset\adresneiroseti,12);память под новый слой с нейронами
  If *neiroset\adresneiroseti>0;память успешно добавилась под новый слой
 
       
        Debug "reallok "
        Debug *neiroset\adresneiroseti
        Debug sloy(*neiroset\kolsloev-1)
      sloy(*neiroset\kolsloev-1)\idsloy=idsloy
      sloy(*neiroset\kolsloev-1)\kolihestvoneironov_sloy=kolihestvoneironov_sloy
    If kolihestvoneironov_sloy>0;если в слое создаётся хотя бы один нейрон
     sloy(*neiroset\kolsloev-1)\adrespervogoneirona=AllocateMemory(kolihestvoneironov_sloy*12)
     Debug "pervyiadres neironov"
     Debug sloy(*neiroset\kolsloev-1)\adrespervogoneirona
     If sloy(*neiroset\kolsloev-1)\adrespervogoneirona>0;память под нейроны выделена
     
      *neiron.neiron=sloy(*neiroset\kolsloev-1)\adrespervogoneirona
   
   
       For i=0 To kolihestvoneironov_sloy-1;записываем в id нейрона его иденфикацию по номерации
        *neiron.neiron+(i*12)
        *neiron\idneirona=i+1
   
       
       Next
      Else
           Debug "error sdres neironov v 1 sloe"
           ProcedureReturn 0
      EndIf
    EndIf
     ProcedureReturn 1
       
       
       
       
       
 
    Else
    Debug "error resdres sloy"
    ProcedureReturn 0
  EndIf
 
 
 
Else
  *neiroset\adresneiroseti=@sloy(0);;;;;AllocateMemory(12);адрес первого слоя
  If *neiroset\adresneiroseti>0
    ;*sloy.sloy=*neiroset\adresneiroseti
    Debug "adres seti"
    Debug *neiroset\adresneiroseti
   
 
    sloy(0)\idsloy=idsloy
    sloy(0)\kolihestvoneironov_sloy=kolihestvoneironov_sloy
    If kolihestvoneironov_sloy>0;если в слое создаётся хотя бы один нейрон
     
     sloy(0)\adrespervogoneirona=AllocateMemory(kolihestvoneironov_sloy*12)
     Debug "pervyiadres neironov"
     Debug sloy(0)\adrespervogoneirona
     If sloy(0)\adrespervogoneirona>0;память под нейроны выделена
     
      *neiron.neiron=sloy(0)\adrespervogoneirona
   
   
       For i=0 To kolihestvoneironov_sloy-1;записываем в id нейрона его иденфикацию по номерации
        *neiron.neiron+(i*12)
        *neiron\idneirona=i+1
   
       
       Next
      Else
           Debug "error sdres neironov v 1 sloe"
           ProcedureReturn 0
      EndIf
    EndIf
     ProcedureReturn 1
  Else
    Debug "error sdres 1 sloy"
    ProcedureReturn 0
  EndIf
EndIf
 
EndProcedure
 
 
Procedure vvod()
 
 
EndProcedure
 
Global neiroset.neiroset
Sozdanie_sloy_neiroseti(@neiroset,1,5);idsloy,количество нейронов
Sozdanie_sloy_neiroseti(@neiroset,2,7)
Sozdanie_sloy_neiroseti(@neiroset,3,3)
Sozdanie_sloy_neiroseti(@neiroset,4,10)
 
 
 FreeNeiroset(@neiroset)
 
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Что за глюк с памятью?
СообщениеДобавлено: Сб июл 20, 2019 4:34 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11505
Благодарил (а): 4 раз.
Поблагодарили: 469 раз.
Проблема из-за этой строки.
Код:
1
            *neiron\idneirona=i+1

Явно не куда нужно производится запись.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Что за глюк с памятью?
СообщениеДобавлено: Сб июл 20, 2019 6:09 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 880
Благодарил (а): 2 раз.
Поблагодарили: 42 раз.
Пункты репутации: 9
Пётр писал(а):
Проблема из-за этой строки.
Код:
1
            *neiron\idneirona=i+1

Явно не куда нужно производится запись.

Не из за неё а смещение было не правельным нужно так. :roll:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
 
      *neiron.neiron=*sloy\adrespervogoneirona
     Debug "adres neironov"
    ;Debug *sloy\adrespervogoneirona
   
    For i=0 To kolihestvoneironov_sloy-1;записываем в id нейрона его иденфикацию по номерации
       
       Debug  *neiron.neiron
        *neiron\idneirona=i+1
    ;PokeI(*neiron.neiron+8,i+1)
        *neiron.neiron+12
         Next
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Что за глюк с памятью?
СообщениеДобавлено: Пт июл 26, 2019 4:53 pm 
Не в сети
профессор

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 359
Благодарил (а): 1 раз.
Поблагодарили: 14 раз.
Пункты репутации: 0
а ты что нейросеть хочь создать

_________________
искатель истины


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB