<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Нейросеть на LUA]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Нейросеть на LUA форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Mon, 20 Apr 2026 10:35:51 +0300</pubDate>
		<item>
			<title>Нейросеть на LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message67152/topic7783/">Нейросеть на LUA</a></b> <i>Нейронная сеть на LUA</i> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_4yENzXkU" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br />Можете привести оценку скорости обучения для каких либо примеров и сравнение скорости например с факелом.<br />=============<br />Я пока сравнивал только с такой же нейронкой на C#. На шарпе сильно медленней работает. Скорость и качество обучения зависит от параметра &quot;e&quot;. Сейчас эксперементирую с изменением &quot;е&quot; во время обучения в зависимосит от средней квадратической ошибки. <br />
			<i>27.11.2022 12:21:42, Сергей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message67152/topic7783/</link>
			<guid>http://forum.quik.ru/messages/forum17/message67152/topic7783/</guid>
			<pubDate>Sun, 27 Nov 2022 12:21:42 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Нейросеть на LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message67151/topic7783/">Нейросеть на LUA</a></b> <i>Нейронная сеть на LUA</i> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Спасибо за код. <br />Будет время попробую. <br />
			<i>27.11.2022 09:51:08, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message67151/topic7783/</link>
			<guid>http://forum.quik.ru/messages/forum17/message67151/topic7783/</guid>
			<pubDate>Sun, 27 Nov 2022 09:51:08 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Нейросеть на LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message67150/topic7783/">Нейросеть на LUA</a></b> <i>Нейронная сеть на LUA</i> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_qMXByaJp" href="/user/1339/" bx-tooltip-user-id="1339">Сергей</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/1339/" target="_blank" rel="nofollow">Сергей</a></noindex> написал:<br />Ткните в строку, плиз.<br />=============<br /> В NeuralNetwork.Training первые строки до коммента &quot;--Теперь правим веса&quot;: ошибки(delta) собираются в обратной порядке: выходной слой, далее остальные(for tmpl =self.layers-1, 1, -1 do -- слои) до первого.<br />=============<br />Можете привести оценку скорости обучения для каких либо примеров и сравнение скорости например с факелом.<br />--------------------------<br />Я сделал обертку для Lua библиотеки &nbsp;fastNet на СИ, но &nbsp;для акций ее так и не применил, <br />так как использую бинарную сеть, для которой не нашел алгоритма оптимизации.<br /> &nbsp; <br />
			<i>27.11.2022 09:49:43, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message67150/topic7783/</link>
			<guid>http://forum.quik.ru/messages/forum17/message67150/topic7783/</guid>
			<pubDate>Sun, 27 Nov 2022 09:49:43 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Нейросеть на LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message67145/topic7783/">Нейросеть на LUA</a></b> <i>Нейронная сеть на LUA</i> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_GhabwEvP" href="/user/1339/" bx-tooltip-user-id="1339">Сергей</a> написал:<br />Ткните в строку, плиз.<br />=============<br />В NeuralNetwork.Training первые строки до коммента &quot;--Теперь правим веса&quot;: ошибки(delta) собираются в обратной порядке: выходной слой, далее остальные(for tmpl =self.layers-1, 1, -1 do -- слои) до первого. <br />
			<i>26.11.2022 16:43:03, Сергей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message67145/topic7783/</link>
			<guid>http://forum.quik.ru/messages/forum17/message67145/topic7783/</guid>
			<pubDate>Sat, 26 Nov 2022 16:43:03 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Нейросеть на LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message67143/topic7783/">Нейросеть на LUA</a></b> <i>Нейронная сеть на LUA</i> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_R19Yul9k" href="/user/1339/" bx-tooltip-user-id="1339">Сергей</a> написал:<br />Всем привет. <br />Сделал нейронку на LUA. Может кому пригодится:<br />=============<br />что-то не вижу обратного распространения ошибки.<br />Ткните в строку, плиз. <br />
			<i>26.11.2022 16:27:11, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message67143/topic7783/</link>
			<guid>http://forum.quik.ru/messages/forum17/message67143/topic7783/</guid>
			<pubDate>Sat, 26 Nov 2022 16:27:11 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Нейросеть на LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message67138/topic7783/">Нейросеть на LUA</a></b> <i>Нейронная сеть на LUA</i> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Всем привет. <br />Сделал нейронку на LUA. Может кому пригодится:
====code====
<pre>NeuralNetwork = {}
NeuralNetwork.__index = NeuralNetwork
function NeuralNetwork.new(inputs, layers, neyrons) -- Инициализация
 local self = setmetatable({}, NeuralNetwork)
 self.layers=layers -- слоев
 self.inputs=inputs -- входов
 self.neyrons=neyrons --нейронов в слое
 self.k=0.5
 self.e=0.01 -- Скорость обучения
 self.im=0.01 -- импульс
 self.traininig_count=0 --Будем считать обучения

 self.w={}
 self.nout={}
 self.dw={}
 self.delta={}
 self.w&#91;1&#93;={}
 self.nout&#91;1&#93;={}
 self.dw&#91;1&#93;={}
 self.delta&#91;1&#93;={}

 local i
 local l
 for i = 1, self.neyrons, 1 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.w&#91;1&#93;&#91;i&#93;={}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.dw&#91;1&#93;&#91;i&#93;={}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.delta&#91;1&#93;&#91;i&#93;={}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.nout&#91;1&#93;&#91;i&#93;={}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ii = 1, self.inputs+1, 1 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.w&#91;1&#93;&#91;i&#93;&#91;ii&#93;=math.random()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.dw&#91;1&#93;&#91;i&#93;&#91;ii&#93;=0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
 end

 for l = 2, self.layers, 1 do --перебор остальных слоев
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.w&#91;l&#93;={}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.dw&#91;l&#93;={}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.delta&#91;l&#93;={}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.nout&#91;l&#93;={}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i = 1, self.neyrons, 1 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.w&#91;l&#93;&#91;i&#93;={}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.dw&#91;l&#93;&#91;i&#93;={}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.delta&#91;l&#93;&#91;i&#93;={}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.nout&#91;l&#93;&#91;i&#93;={}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ii = 1, self.neyrons+1, 1 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.w&#91;l&#93;&#91;i&#93;&#91;ii&#93;=1*math.random()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.dw&#91;l&#93;&#91;i&#93;&#91;ii&#93;=0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
 end
 --Выходной нейрон
 self.w&#91;self.layers+1&#93;={}
 self.dw&#91;self.layers+1&#93;={}
 self.w&#91;self.layers+1&#93;&#91;1&#93;={}
 self.dw&#91;self.layers+1&#93;&#91;1&#93;={}
 self.delta&#91;self.layers+1&#93;={}
 self.delta&#91;self.layers+1&#93;&#91;1&#93;={}
 for ii = 1, self.neyrons+1, 1 do -- +w0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.w&#91;self.layers+1&#93;&#91;1&#93;&#91;ii&#93;=1*math.random()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.dw&#91;self.layers+1&#93;&#91;1&#93;&#91;ii&#93;=0
 end

 return self
end

function NeuralNetwork.Save(self, filename)
&nbsp;&nbsp;&nbsp;&nbsp;local f,err = io.open(filename,"w")
&nbsp;&nbsp;&nbsp;&nbsp;if not f then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;f:write(table.tostring(self))
&nbsp;&nbsp;&nbsp;&nbsp;f:close()
&nbsp;&nbsp;&nbsp;&nbsp;return true
end
function NeuralNetwork.Load(self, filename)
&nbsp;&nbsp;&nbsp;&nbsp;local f,err = io.open(filename,"r")
&nbsp;&nbsp;&nbsp;&nbsp;if not f then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;local tbl = assert(load("return " .. f:read("*a")))
&nbsp;&nbsp;&nbsp;&nbsp;f:close()
&nbsp;&nbsp;&nbsp;&nbsp;for k,v in pairs(tbl()) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (type(v)=="table") then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self&#91;k&#93;=table_copy(v)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self&#91;k&#93; = v
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;return true
end

function NeuralNetwork.Training(self, data, res) --Одно обучение
&nbsp;&nbsp;&nbsp;&nbsp;self.traininig_count=self.traininig_count+1 -- счетчик обучений
&nbsp;&nbsp;&nbsp;&nbsp;local nres=self:Play(data) --Свой результат
&nbsp;&nbsp;&nbsp;&nbsp;self.delta&#91;self.layers+1&#93;&#91;1&#93;=(res-nres) --Начинаем с выходного слоя
&nbsp;&nbsp;&nbsp;&nbsp;for tmpi = 1, self.neyrons, 1 do -- последний перед выходом слой
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.delta&#91;self.layers&#93;&#91;tmpi&#93; = self.w&#91;self.layers + 1&#93;&#91;1&#93;&#91;tmpi&#93; * self.delta&#91;self.layers + 1&#93;&#91;1&#93;*dsigmoda(self.nout&#91;self.layers&#93;&#91;tmpi&#93;, self.k)
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;for tmpl =self.layers-1, 1, -1 do -- слои
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for tmpn = 1, self.neyrons, 1 do-- нейроны в слое
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.delta&#91;tmpl&#93;&#91;tmpn&#93; = 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for tmpi = 1, self.neyrons, 1 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.delta&#91;tmpl&#93;&#91;tmpn&#93; = self.delta&#91;tmpl&#93;&#91;tmpn&#93; + (self.w&#91;tmpl + 1&#93;&#91;tmpi&#93;&#91;tmpn&#93; * self.delta&#91;tmpl + 1&#93;&#91;tmpi&#93;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.delta&#91;tmpl&#93;&#91;tmpn&#93; = self.delta&#91;tmpl&#93;&#91;tmpn&#93; * dsigmoda(self.nout&#91;tmpl&#93;&#91;tmpn&#93;,self.k)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;--Теперь правим веса
&nbsp;&nbsp;&nbsp;&nbsp;--Правим в первом/входном слое *************************** первый(0) *************************************
&nbsp;&nbsp;&nbsp;&nbsp;for tmpn = 1, self.neyrons, 1 do -- нейроны в слое
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.dw&#91;1&#93;&#91;tmpn&#93;&#91;self.inputs + 1&#93; = (self.e * self.delta&#91;1&#93;&#91;tmpn&#93; * (1 - self.im)) + (self.im * self.dw&#91;1&#93;&#91;tmpn&#93;&#91;self.inputs + 1&#93;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.w&#91;1&#93;&#91;tmpn&#93;&#91;self.inputs + 1&#93; = self.w&#91;1&#93;&#91;tmpn&#93;&#91;self.inputs + 1&#93; + self.dw&#91;1&#93;&#91;tmpn&#93;&#91;self.inputs + 1&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for tmpi = 1, self.inputs, 1 do -- нейроны в слое
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.dw&#91;1&#93;&#91;tmpn&#93;&#91;tmpi&#93; = (data&#91;tmpi&#93; * self.e * self.delta&#91;1&#93;&#91;tmpn&#93; * (1 - self.im)) + (self.im * self.dw&#91;1&#93;&#91;tmpn&#93;&#91;tmpi&#93;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.w&#91;1&#93;&#91;tmpn&#93;&#91;tmpi&#93; = self.w&#91;1&#93;&#91;tmpn&#93;&#91;tmpi&#93; + self.dw&#91;1&#93;&#91;tmpn&#93;&#91;tmpi&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;--Остальные слои
&nbsp;&nbsp;&nbsp;&nbsp;for tmpl = 2, self.layers, 1 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for tmpn = 1, self.neyrons, 1 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.dw&#91;tmpl&#93;&#91;tmpn&#93;&#91;self.neyrons + 1&#93; = (self.e * self.delta&#91;tmpl&#93;&#91;tmpn&#93; * (1 - self.im)) + (self.im * self.dw&#91;tmpl&#93;&#91;tmpn&#93;&#91;self.neyrons + 1&#93;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.w&#91;tmpl&#93;&#91;tmpn&#93;&#91;self.neyrons + 1&#93; = self.w&#91;tmpl&#93;&#91;tmpn&#93;&#91;self.neyrons + 1&#93; + self.dw&#91;tmpl&#93;&#91;tmpn&#93;&#91;self.neyrons + 1&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for tmpi = 1,&nbsp;&nbsp;self.neyrons, 1 do --нейроны в слое
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.dw&#91;tmpl&#93;&#91;tmpn&#93;&#91;tmpi&#93; = (self.nout&#91;tmpl-1&#93;&#91;tmpi&#93; * self.e * self.delta&#91;tmpl&#93;&#91;tmpn&#93; * (1 - self.im)) + (self.im * self.dw&#91;tmpl&#93;&#91;tmpn&#93;&#91;tmpi&#93;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.w&#91;tmpl&#93;&#91;tmpn&#93;&#91;tmpi&#93; = self.w&#91;tmpl&#93;&#91;tmpn&#93;&#91;tmpi&#93; + self.dw&#91;tmpl&#93;&#91;tmpn&#93;&#91;tmpi&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;-- Выходной слой из одного нейрона
&nbsp;&nbsp;&nbsp;&nbsp;self.dw&#91;self.layers+1&#93;&#91;1&#93;&#91;self.neyrons + 1&#93; = (self.e * self.delta&#91;self.layers + 1&#93;&#91;1&#93; * (1 - self.im)) + (self.im * self.dw&#91;self.layers + 1&#93;&#91;1&#93;&#91;self.neyrons + 1&#93;)
&nbsp;&nbsp;&nbsp;&nbsp;self.w&#91;self.layers+1&#93;&#91;1&#93;&#91;self.neyrons + 1&#93; = self.w&#91;self.layers + 1&#93;&#91;1&#93;&#91;self.neyrons + 1&#93; + self.dw&#91;self.layers + 1&#93;&#91;1&#93;&#91;self.neyrons + 1&#93;
&nbsp;&nbsp;&nbsp;&nbsp;for tmpi = 1,&nbsp;&nbsp;self.neyrons, 1 do -- нейроны в слое
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.dw&#91;self.layers + 1&#93;&#91; 1&#93;&#91;tmpi&#93; = (self.nout&#91;self.layers&#93;&#91;tmpi&#93; * self.e * self.delta&#91;self.layers + 1&#93;&#91;1&#93; * (1 - self.im)) + (self.im * self.dw&#91;self.layers + 1&#93;&#91;1&#93;&#91;tmpi&#93;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.w&#91;self.layers + 1&#93;&#91;1&#93;&#91;tmpi&#93; = self.w&#91;self.layers + 1&#93;&#91;1&#93;&#91;tmpi&#93; + self.dw&#91;self.layers + 1&#93;&#91;1&#93;&#91;tmpi&#93;
&nbsp;&nbsp;&nbsp;&nbsp;end
end

function NeuralNetwork.Play(self, tick_data) -- Принятие решения
&nbsp;&nbsp;&nbsp;&nbsp;local l
&nbsp;&nbsp;&nbsp;&nbsp;local n
&nbsp;&nbsp;&nbsp;&nbsp;local i
&nbsp;&nbsp;&nbsp;&nbsp;for l = 1, self.layers, 1 do -- проход по всем слоям, 1 - входной слой
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for n = 1, self.neyrons, 1 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local mmax
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (l==1) then --входной слой
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.nout&#91;l&#93;&#91;n&#93;=1*self.w&#91;l&#93;&#91;n&#93;&#91;self.inputs+1&#93; --W0 последний
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mmax=self.inputs
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.nout&#91;l&#93;&#91;n&#93;=1*self.w&#91;l&#93;&#91;n&#93;&#91;self.neyrons+1&#93; --W0 последний
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mmax=self.neyrons
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i = 1, mmax, 1 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (l==1) then --входной слой
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.nout&#91;l&#93;&#91;n&#93;=self.nout&#91;l&#93;&#91;n&#93;+(tick_data&#91;i&#93;*self.w&#91;l&#93;&#91;n&#93;&#91;i&#93;)&nbsp;&nbsp;--W0 последний
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.nout&#91;l&#93;&#91;n&#93;=self.nout&#91;l&#93;&#91;n&#93;+(self.nout&#91;l-1&#93;&#91;i&#93;*self.w&#91;l&#93;&#91;n&#93;&#91;i&#93;) --W0 последний
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.nout&#91;l&#93;&#91;n&#93;=sigmoda(self.nout&#91;l&#93;&#91;n&#93;, self.k)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;--Выходной нейрон
&nbsp;&nbsp;&nbsp;&nbsp;self.nout&#91;self.layers+1&#93;=self.w&#91;self.layers+1&#93;&#91;1&#93;&#91;self.neyrons+1&#93; --W0
&nbsp;&nbsp;&nbsp;&nbsp;for i = 1, self.neyrons, 1 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.nout&#91;self.layers+1&#93;=self.nout&#91;self.layers+1&#93;+(self.nout&#91;self.layers&#93;&#91;i&#93;*self.w&#91;self.layers+1&#93;&#91;1&#93;&#91;i&#93;)
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;return sigmoda(self.nout&#91;self.layers+1&#93;, self.k)
end
function dsigmoda(x, k)
&nbsp;&nbsp;&nbsp;&nbsp;local r
&nbsp;&nbsp;&nbsp;&nbsp;r = k * x * (1 - x)
&nbsp;&nbsp;&nbsp;&nbsp;return r
end
function sigmoda(x, k)
&nbsp;&nbsp;&nbsp;&nbsp;local r
&nbsp;&nbsp;&nbsp;&nbsp;r = 1 / (1 + math.exp(-x * k))
&nbsp;&nbsp;&nbsp;&nbsp;return r
end
function table_copy(originalTable)
&nbsp;&nbsp;&nbsp;&nbsp;local copyTable = {}
&nbsp;&nbsp;&nbsp;&nbsp; for k,v in pairs(originalTable) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (type(v)=="table") then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; copyTable&#91;k&#93;=table_copy(v)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; copyTable&#91;k&#93; = v
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end
&nbsp;&nbsp;&nbsp;&nbsp; end
&nbsp;&nbsp;&nbsp;&nbsp;return copyTable
end

</pre>
=============
<br />Пример: <br />
====code====
<pre>--Обучающие данные
local TrainingData={}
for i=1, 100, 1 do
&nbsp;&nbsp;&nbsp;&nbsp;local d1=math.random() -- Обучающие данные
&nbsp;&nbsp;&nbsp;&nbsp;local d2=math.random() -- Обучающие данные
&nbsp;&nbsp;&nbsp;&nbsp;local result=0 -- Правильный ответ
&nbsp;&nbsp;&nbsp;&nbsp;if (d1&#62;d2) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result=1
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;local td={d1, d2, result}
&nbsp;&nbsp;&nbsp;&nbsp;TrainingData&#91;#TrainingData+1&#93;=td
end

--Обучение
local nn=NeuralNetwork.new(2, 3, 3)
for age=1, 100, 1 do -- Эпохи
&nbsp;&nbsp;&nbsp;&nbsp;for i=1, #TrainingData, 1 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local td=TrainingData&#91;i&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nn:Training(td, td&#91;#td&#93;)
&nbsp;&nbsp;&nbsp;&nbsp;end
end

--Проверка
&nbsp;&nbsp;&nbsp;&nbsp;local d1=math.random() 
&nbsp;&nbsp;&nbsp;&nbsp;local d2=math.random() 
&nbsp;&nbsp;&nbsp;&nbsp;td={d1, d2}
&nbsp;&nbsp;&nbsp;&nbsp;local result=nn:Play(td)
&nbsp;&nbsp;&nbsp;&nbsp;PrintDbgStr(d1.." "..d2.." "..result)&nbsp;&nbsp; 
--Сохраним обученную нейронку&nbsp;&nbsp; 
fn=getScriptPath().."&#92;&#92;test.nn"
nn:Save(fn)


</pre>
============= <br />
			<i>26.11.2022 14:39:50, Сергей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message67138/topic7783/</link>
			<guid>http://forum.quik.ru/messages/forum17/message67138/topic7783/</guid>
			<pubDate>Sat, 26 Nov 2022 14:39:50 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
	</channel>
</rss>
