From 613bf11b44d4c7ee8cd4df119a6fdea85e4e273a Mon Sep 17 00:00:00 2001 From: Alexander Nedovizin Date: Thu, 15 Oct 2020 21:25:11 +0500 Subject: [PATCH 01/15] =?UTF-8?q?ref=20(neuro=5Felman):=20=D0=BD=D0=B0?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D0=B0=20=D0=B2=D0=B2=D0=BE?= =?UTF-8?q?=D0=B4=D0=B0/=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B0=20wip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nodes/logic/neuro_elman.py | 254 ++++++++++++++++++++----------------- 1 file changed, 138 insertions(+), 116 deletions(-) diff --git a/nodes/logic/neuro_elman.py b/nodes/logic/neuro_elman.py index 6378b8f84..5eb21678a 100644 --- a/nodes/logic/neuro_elman.py +++ b/nodes/logic/neuro_elman.py @@ -17,6 +17,7 @@ # ##### END GPL LICENSE BLOCK ##### # by Alexander Nedovizin +from pprint import pprint import bpy from bpy.props import BoolProperty, IntProperty, StringProperty, FloatProperty @@ -33,93 +34,88 @@ from cmath import exp class SvNeuro_Elman: + def __init__(self): + self.gister = 0.1 + self.k_learning = 0.1 def init_w(self, number, ext, treshold): out = [] - for n in range(number): - tmp = [] - for e in range(ext): - tmp.append(uniform(-treshold, treshold)) + for _ in range(number): + tmp = [uniform(-treshold, treshold) for _ in range(ext)] out.append(tmp) return out - def sigmoida(self, x, a): - if a==0: - b=1 + if a == 0: + b = 1 else: - b = 1/a - return 1/(1+exp(-b*x).real+1e-8) + b = 1 / a + return 1 / (1 + exp(-b * x).real + 1e-8) - def neuro(self, list_in, etalon, maxim, learning, prop): + def neuro(self, list_in, etalon, maxim, is_learning, prop): outA = self.layerA(list_in, prop) outB = self.layerB(outA, prop) outC = self.layerC(outB, prop) - if learning: - lin = len(etalon) - if linabs(maxim/2): break + xi = xi - prop['epsilon'] * xi * (maxim - xi) + absdx = abs(x - xi) + if absdx <= prop['trashold'] or absdx > abs(maxim / 2): + break list_x[idx] = xi outB_ = self.layerB(list_x, prop) @@ -167,15 +164,15 @@ class SvNeuro_Elman: prop['wB'] = list_wB - class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): ''' Neuro Elman 1 Layer ''' + bl_idname = 'SvNeuroElman1LNode' bl_label = '*Neuro Elman 1 Layer' bl_icon = 'OUTLINER_OB_EMPTY' sv_icon = 'SV_NEURO' - Elman = SvNeuro_Elman() + Elman = None k_learning: FloatProperty(name='k_learning', default=0.1, update=updateNode) gisterezis: FloatProperty(name='gisterezis', default=0.1, min=0.0, update=updateNode) @@ -184,10 +181,13 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) epsilon: FloatProperty(name='epsilon', default=1.0, update=updateNode) treshold: FloatProperty(name='treshold', default=0.01, update=updateNode) k_lambda: FloatProperty(name='k_lambda', default=0.001, max=0.1, update=updateNode) - cycles: IntProperty(name='cycles', default=3, min = 1, update=updateNode) - lA: IntProperty(name='lA', default=1, min = 0, update=updateNode) - lB: IntProperty(name='lB', default=5, min = 0, update=updateNode) - lC: IntProperty(name='lC', default=1, min = 0, update=updateNode) + cycles: IntProperty(name='cycles', default=3, min=1, update=updateNode) + lA: IntProperty(name='lA', default=1, min=0, update=updateNode) + lB: IntProperty(name='lB', default=5, min=0, update=updateNode) + lC: IntProperty(name='lC', default=1, min=0, update=updateNode) + + # def __init__(self, *args, **kwargs): + # self.Elman = SvNeuro_Elman() def sv_init(self, context): self.inputs.new('SvStringsSocket', "data") @@ -202,7 +202,7 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) layout.prop(self, "maximum", text="maximum") layout.prop(self, "cycles", text="cycles") op_start = layout.operator('node.sverchok_neuro', text='Restart') - op_start.typ=1 + op_start.typ = 1 op_start.handle_name = handle_name layout.prop(self, "menushka", text="extend sets:") if self.menushka: @@ -220,28 +220,34 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) col = layout.column(align=True) col.prop(self, "treshold", text="treshold") - def process(self): handle_name = self.name + self.id_data.name handle = handle_read(handle_name) props = handle[1] if not handle[0]: - props = {'InA':2, - 'InB':5, - 'InC':1, - 'wA':[], - 'wB':[], - 'gister':0.01, - 'k_learning':0.1, - 'epsilon':1.3, - 'cycles':3, - 'trashold':0.01, - 'k_lambda':0.0001} - - props['wA'] = self.Elman.init_w(props['InA'], props['InB'], props['trashold']) - props['wB'] = self.Elman.init_w(props['InB'], props['InC'], props['trashold']) - - + Elman = SvNeuro_Elman() + props = {'InA': 2, + 'InB': 5, + 'InC': 1, + 'wA': [], + 'wB': [], + 'gister': 0.01, + 'k_learning': 0.1, + 'epsilon': 1.3, + 'cycles': 3, + 'trashold': 0.01, + 'k_lambda': 0.0001, + 'Elman': Elman, + } + + + + # props['wA'] = self.Elman.init_w(props['InA'], props['InB'], props['trashold']) + # props['wB'] = self.Elman.init_w(props['InB'], props['InC'], props['trashold']) + print("initialize handle:", handle[0]) + + print("******-----------**********") + self.Elman = props['Elman'] self.Elman.gister = abs(self.gisterezis) self.Elman.k_learning = self.k_learning @@ -249,18 +255,19 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) if self.outputs['result'].is_linked and self.inputs['data'].is_linked: if self.inputs['etalon'].is_linked: - etalon = self.inputs['etalon'].sv_get()[0] - flag = True + input_etalon = self.inputs['etalon'].sv_get() + is_learning = True else: - flag = False - etalon = [[0]] + input_etalon = [[0]] + is_learning = False - if (props['InA']!=self.lA+1) or props['InB']!=self.lB or props['InC']!=self.lC: - props['InA'] = self.lA+1 + if (props['InA'] != self.lA + 1) or props['InB'] != self.lB or props['InC'] != self.lC: + props['InA'] = self.lA + 1 props['InB'] = self.lB props['InC'] = self.lC - props['wA'] = self.Elman.init_w(props['InA'], props['InB']) - props['wB'] = self.Elman.init_w(props['InB'], props['InC']) + props['wA'] = self.Elman.init_w(props['InA'], props['InB'], props['trashold']) + props['wB'] = self.Elman.init_w(props['InB'], props['InC'], props['trashold']) + print("Elman again ... By handle:", handle[0]) props['gister'] = self.gisterezis props['k_learning'] = self.k_learning @@ -269,54 +276,69 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) props['cycles'] = self.cycles props['trashold'] = self.treshold - data_ = self.inputs['data'].sv_get()[0] - if type(etalon[0]) not in [list, tuple]: etalon = [etalon] - if type(data_[0]) not in [list, tuple]: data_ = [data_] - for idx, data in enumerate(data_): - let = len(etalon)-1 - eta = etalon[min(idx,let)] - data2 = [1.0]+data - if type(eta) not in [list, tuple]: eta = [eta] - result.append([self.Elman.neuro(data2, eta, self.maximum, flag, props)]) + input_data = self.inputs['data'].sv_get() - else: - result = [[[]]] + print("pre etalon ", input_etalon) + print("pre data ", input_data) - handle_write(handle_name, props) - self.outputs['result'].sv_set(result) + if type(input_etalon[0]) not in [list, tuple]: + input_etalon = [input_etalon] + if type(input_data[0]) not in [list, tuple]: + input_data = [input_data] + print("etalon ", input_etalon) + print("data ", input_data) + for idx, data in enumerate(input_data): + let = len(input_etalon) - 1 + eta = input_etalon[min(idx, let)] + data2 = [1.0] + data + if type(eta) not in [list, tuple]: + eta = [eta] + print("\nPROCESS:") + pprint("data2={0}\neta={1}\nself.maximum={2}\nflag={3}\nprops={4}".format(data2, eta, self.maximum, + is_learning, props)) -#********************************* + result.append([self.Elman.neuro(data2, eta, self.maximum, is_learning, props)]) + result.append(result.pop(0)) -class SvNeuroOps(bpy.types.Operator): - """ Neuro operators """ - bl_idname = "node.sverchok_neuro" - bl_label = "Sverchok Neuro operators" - bl_options = {'REGISTER', 'UNDO'} + else: + result = [[[]]] - typ: IntProperty(name='typ', default=0) - handle_name: StringProperty(name='handle') + handle_write(handle_name, props) + self.outputs['result'].sv_set(result) - def execute(self, context): - if self.typ == 1: - handle = handle_read(self.handle_name) - prop = handle[1] - Elman = SvNeuro_Elman() - if handle[0]: - prop['wA']=Elman.init_w(prop['InA'], prop['InB'], prop['trashold']) - prop['wB']=Elman.init_w(prop['InB'], prop['InC'], prop['trashold']) - handle_write(self.handle_name, prop) - return {'FINISHED'} +# ********************************* + +# class SvNeuroOps(bpy.types.Operator): +# """ Neuro operators """ +# bl_idname = "node.sverchok_neuro" +# bl_label = "Sverchok Neuro operators" +# bl_options = {'REGISTER', 'UNDO'} +# +# typ: IntProperty(name='typ', default=0) +# handle_name: StringProperty(name='handle') +# +# def execute(self, context): +# if self.typ == 1: +# handle = handle_read(self.handle_name) +# prop = handle[1] +# Elman = SvNeuro_Elman() +# if handle[0]: +# prop['wA'] = Elman.init_w(prop['InA'], prop['InB'], prop['trashold']) +# prop['wB'] = Elman.init_w(prop['InB'], prop['InC'], prop['trashold']) +# handle_write(self.handle_name, prop) +# +# return {'FINISHED'} def register(): - bpy.utils.register_class(SvNeuroOps) + # bpy.utils.register_class(SvNeuroOps) bpy.utils.register_class(SvNeuroElman1LNode) def unregister(): bpy.utils.unregister_class(SvNeuroElman1LNode) - bpy.utils.unregister_class(SvNeuroOps) + # bpy.utils.unregister_class(SvNeuroOps) -- GitLab From 30bf0d5ccc71c422e513d8042dd0c559f091a07c Mon Sep 17 00:00:00 2001 From: Alexander Nedovizin Date: Fri, 16 Oct 2020 12:33:36 +0500 Subject: [PATCH 02/15] =?UTF-8?q?fix=20(neuro=5Felman):=20=D1=83=D0=B7?= =?UTF-8?q?=D0=B5=D0=BB=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nodes/logic/neuro_elman.py | 70 +++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/nodes/logic/neuro_elman.py b/nodes/logic/neuro_elman.py index 5eb21678a..ddcdc09b0 100644 --- a/nodes/logic/neuro_elman.py +++ b/nodes/logic/neuro_elman.py @@ -65,6 +65,11 @@ class SvNeuro_Elman: etalon = etalon + [0] * d etalon_ = list(map(lambda x: x / maxim, etalon)) self.learning(outA, outB, outC, etalon_, maxim, prop) + # print("it's learning") + # else: + # print("without learning") + + # print("outC", outC) outC_ = list(map(lambda x: x * maxim, outC)) return outC_ @@ -108,8 +113,8 @@ class SvNeuro_Elman: def func_ej_last(self, dj, yj): return dj - yj - # def func_ej_inner(self, Esigmak, wkj): - # return Esigmak * wkj + def func_ej_inner(self, Esigmak, wkj): + return Esigmak * wkj def delta_wji(self, sigmaj, yi, prop): return prop['k_learning'] * sigmaj * yi @@ -148,7 +153,9 @@ class SvNeuro_Elman: for ida, a in enumerate(outA): dwji = self.delta_wji(sigmaB, a, prop) + print(f"list_wA={list_wA}\tida={ida}\tidb={idb}\toutA={outA}") list_wA[ida][idb] = self.func_w(list_wA[ida][idb], dwji, prop) + print("eA", eA, "\tida=", ida) eA[ida] += sigmaB * dwji xi = xi - prop['epsilon'] * xi * (maxim - xi) @@ -186,9 +193,6 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) lB: IntProperty(name='lB', default=5, min=0, update=updateNode) lC: IntProperty(name='lC', default=1, min=0, update=updateNode) - # def __init__(self, *args, **kwargs): - # self.Elman = SvNeuro_Elman() - def sv_init(self, context): self.inputs.new('SvStringsSocket', "data") self.inputs.new('SvStringsSocket', "etalon") @@ -239,11 +243,6 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) 'k_lambda': 0.0001, 'Elman': Elman, } - - - - # props['wA'] = self.Elman.init_w(props['InA'], props['InB'], props['trashold']) - # props['wB'] = self.Elman.init_w(props['InB'], props['InC'], props['trashold']) print("initialize handle:", handle[0]) print("******-----------**********") @@ -312,33 +311,40 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) # ********************************* -# class SvNeuroOps(bpy.types.Operator): -# """ Neuro operators """ -# bl_idname = "node.sverchok_neuro" -# bl_label = "Sverchok Neuro operators" -# bl_options = {'REGISTER', 'UNDO'} -# -# typ: IntProperty(name='typ', default=0) -# handle_name: StringProperty(name='handle') -# -# def execute(self, context): -# if self.typ == 1: -# handle = handle_read(self.handle_name) -# prop = handle[1] -# Elman = SvNeuro_Elman() -# if handle[0]: -# prop['wA'] = Elman.init_w(prop['InA'], prop['InB'], prop['trashold']) -# prop['wB'] = Elman.init_w(prop['InB'], prop['InC'], prop['trashold']) -# handle_write(self.handle_name, prop) -# -# return {'FINISHED'} +class SvNeuroOps(bpy.types.Operator): + """ Neuro operators """ + bl_idname = "node.sverchok_neuro" + bl_label = "Sverchok Neuro operators" + bl_options = {'REGISTER', 'UNDO'} + + typ: IntProperty(name='typ', default=0) + handle_name: StringProperty(name='handle') + + def execute(self, context): + if self.typ == 1: + handle = handle_read(self.handle_name) + prop = handle[1] + Elman = SvNeuro_Elman() + if handle[0]: + prop['wA'] = Elman.init_w(prop['InA'], prop['InB'], prop['trashold']) + prop['wB'] = Elman.init_w(prop['InB'], prop['InC'], prop['trashold']) + handle_write(self.handle_name, prop) + + return {'FINISHED'} def register(): - # bpy.utils.register_class(SvNeuroOps) + bpy.utils.register_class(SvNeuroOps) bpy.utils.register_class(SvNeuroElman1LNode) def unregister(): bpy.utils.unregister_class(SvNeuroElman1LNode) - # bpy.utils.unregister_class(SvNeuroOps) + bpy.utils.unregister_class(SvNeuroOps) + +# TODO - Не нравится, что структура выходных данных не соответсвует эталону +# TODO - Сделать дескрипторы ко всем видимым элементам +# TODO - Количество входных элементов не должно соответсвовать количеству входных узлов А. Это сильно тормозит комп +# Придумать как решить эту проблему +# TODO - Необходимо обрабатывать несколко объектов. Т.е. получил несколко объектов, так и выдавать несколько объектов +# TODO - Сеть получилась необучаема -- GitLab From 8ba3d9889e8e0ce2cd436757b4e1d8fa3d3b9f98 Mon Sep 17 00:00:00 2001 From: Alexander Nedovizin Date: Sun, 18 Oct 2020 23:10:03 +0500 Subject: [PATCH 03/15] =?UTF-8?q?fix=20(neuro=5Felman):=20=D1=83=D0=B7?= =?UTF-8?q?=D0=B5=D0=BB=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B8=D0=BB=D1=81?= =?UTF-8?q?=D1=8F=20=D0=BE=D0=B1=D1=83=D1=87=D0=B0=D0=B5=D0=BC=D1=8B=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nodes/logic/neuro_elman.py | 59 +++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/nodes/logic/neuro_elman.py b/nodes/logic/neuro_elman.py index ddcdc09b0..4424906a8 100644 --- a/nodes/logic/neuro_elman.py +++ b/nodes/logic/neuro_elman.py @@ -46,17 +46,23 @@ class SvNeuro_Elman: return out - def sigmoida(self, x, a): - if a == 0: - b = 1 - else: - b = 1 / a - return 1 / (1 + exp(-b * x).real + 1e-8) + def sigmoida(self, signal, prop_in): + # if prop_in == 0: + # b = 1 + # else: + # b = 1 / prop_in + # result = 1 / (1 + exp(-b * signal).real + 1e-8) + # print("signal", signal) + result = (exp(signal).real - exp(-signal).real) / (exp(signal).real + exp(-signal).real + 1e-8) + return result def neuro(self, list_in, etalon, maxim, is_learning, prop): outA = self.layerA(list_in, prop) + print("outA", outA) outB = self.layerB(outA, prop) + print("outB", outB) outC = self.layerC(outB, prop) + print("outC", outC) if is_learning: len_etalon = len(etalon) @@ -75,28 +81,30 @@ class SvNeuro_Elman: def layerA(self, list_in, prop): outA = deepcopy(list_in) - lin = len(outA) - if lin < prop['InA']: - d = prop['InA'] - lin - outA.extend([1] * d) + len_outa = len(outA) + if len_outa < prop['InA']: + ext_list_in = prop['InA'] - len_outa + outA.extend([1] * ext_list_in) return outA def layerB(self, outA, prop): outB = [0] * prop['InB'] - for ida, la in enumerate(prop['wA']): - for idb, lb in enumerate(la): - t1 = lb * outA[ida] - outB[idb] += t1 + for idx_a, weights_a in enumerate(prop['wA']): + for idx_b, wa in enumerate(weights_a): + signal_a = wa * outA[idx_a] + # TODO - Здесь можно поставить порог, ниже которого сигнал не пройдёт + outB[idx_b] += signal_a - outB_ = [self.sigmoida(p, prop['InB']) for p in outB] + outB_ = [self.sigmoida(signal_b, prop['InB']) for signal_b in outB] return outB_ def layerC(self, outB, prop): outC = [0] * prop['InC'] - for idb, lb in enumerate(prop['wB']): - for idc, lc in enumerate(lb): - t1 = lc * outB[idb] - outC[idc] += t1 + for idx_b, weights_b in enumerate(prop['wB']): + for idx_c, wb in enumerate(weights_b): + signal_b = wb * outB[idx_b] + # TODO - Здесь можно поставить порог, ниже которого сигнал не пройдёт + outC[idx_c] += signal_b return outC # ********************** @@ -127,13 +135,10 @@ class SvNeuro_Elman: list_wB = deepcopy(prop['wB']) list_x = deepcopy(outA) for idx, x in enumerate(outA): - step = 0 - xi = deepcopy(x) outB_ = deepcopy(outB) outC_ = deepcopy(outC) - while step < prop['cycles']: - step += 1 + for step in range(prop['cycles']): eB = [0] * prop['InB'] eA = [0] * prop['InA'] for idc, c in enumerate(outC_): @@ -181,13 +186,13 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) Elman = None - k_learning: FloatProperty(name='k_learning', default=0.1, update=updateNode) - gisterezis: FloatProperty(name='gisterezis', default=0.1, min=0.0, update=updateNode) - maximum: FloatProperty(name='maximum', default=3.0, update=updateNode) + k_learning: FloatProperty(name='k_learning', default=0.1, update=updateNode, description="Коэффициент обучения") + gisterezis: FloatProperty(name='gisterezis', default=0.1, min=0.0, update=updateNode, description="Точность обучения") + maximum: FloatProperty(name='maximum', default=3.0, update=updateNode, description="Максимальное значение выходного слоя") menushka: BoolProperty(name='menushka', default=False) epsilon: FloatProperty(name='epsilon', default=1.0, update=updateNode) treshold: FloatProperty(name='treshold', default=0.01, update=updateNode) - k_lambda: FloatProperty(name='k_lambda', default=0.001, max=0.1, update=updateNode) + k_lambda: FloatProperty(name='k_lambda', default=0.0001, max=0.1, update=updateNode, description="Точность обучения") cycles: IntProperty(name='cycles', default=3, min=1, update=updateNode) lA: IntProperty(name='lA', default=1, min=0, update=updateNode) lB: IntProperty(name='lB', default=5, min=0, update=updateNode) -- GitLab From be260d11e294b1e898194e86c4b7fc59a358508e Mon Sep 17 00:00:00 2001 From: Alexander Nedovizin Date: Sun, 18 Oct 2020 23:31:19 +0500 Subject: [PATCH 04/15] =?UTF-8?q?ref=20(neuro=5Felman):=20=D1=83=D0=B4?= =?UTF-8?q?=D0=B0=D0=BB=D1=91=D0=BD=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=B4,=20=D0=BF=D0=BE=D0=B4=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=D1=8B=20=D0=B4=D0=B5=D1=81=D0=BA=D1=80=D0=B8=D0=BF?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nodes/logic/neuro_elman.py | 52 +++++++++----------------------------- 1 file changed, 12 insertions(+), 40 deletions(-) diff --git a/nodes/logic/neuro_elman.py b/nodes/logic/neuro_elman.py index 4424906a8..868e4bec9 100644 --- a/nodes/logic/neuro_elman.py +++ b/nodes/logic/neuro_elman.py @@ -17,7 +17,6 @@ # ##### END GPL LICENSE BLOCK ##### # by Alexander Nedovizin -from pprint import pprint import bpy from bpy.props import BoolProperty, IntProperty, StringProperty, FloatProperty @@ -47,22 +46,13 @@ class SvNeuro_Elman: return out def sigmoida(self, signal, prop_in): - # if prop_in == 0: - # b = 1 - # else: - # b = 1 / prop_in - # result = 1 / (1 + exp(-b * signal).real + 1e-8) - # print("signal", signal) result = (exp(signal).real - exp(-signal).real) / (exp(signal).real + exp(-signal).real + 1e-8) return result def neuro(self, list_in, etalon, maxim, is_learning, prop): outA = self.layerA(list_in, prop) - print("outA", outA) outB = self.layerB(outA, prop) - print("outB", outB) outC = self.layerC(outB, prop) - print("outC", outC) if is_learning: len_etalon = len(etalon) @@ -71,11 +61,7 @@ class SvNeuro_Elman: etalon = etalon + [0] * d etalon_ = list(map(lambda x: x / maxim, etalon)) self.learning(outA, outB, outC, etalon_, maxim, prop) - # print("it's learning") - # else: - # print("without learning") - # print("outC", outC) outC_ = list(map(lambda x: x * maxim, outC)) return outC_ @@ -187,16 +173,16 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) Elman = None k_learning: FloatProperty(name='k_learning', default=0.1, update=updateNode, description="Коэффициент обучения") - gisterezis: FloatProperty(name='gisterezis', default=0.1, min=0.0, update=updateNode, description="Точность обучения") + gisterezis: FloatProperty(name='gisterezis', default=0.1, min=0.0, update=updateNode, description="Задаёт порог действительных значений внутри алгоритма обучения (в планах)") maximum: FloatProperty(name='maximum', default=3.0, update=updateNode, description="Максимальное значение выходного слоя") - menushka: BoolProperty(name='menushka', default=False) - epsilon: FloatProperty(name='epsilon', default=1.0, update=updateNode) - treshold: FloatProperty(name='treshold', default=0.01, update=updateNode) + menushka: BoolProperty(name='menushka', default=False, description="Дополнительные параметры") + epsilon: FloatProperty(name='epsilon', default=1.0, update=updateNode, description="Коэффициент участвует в функции оценки обучения") + treshold: FloatProperty(name='treshold', default=0.01, update=updateNode, description="Участвует в оценке обучения") k_lambda: FloatProperty(name='k_lambda', default=0.0001, max=0.1, update=updateNode, description="Точность обучения") - cycles: IntProperty(name='cycles', default=3, min=1, update=updateNode) - lA: IntProperty(name='lA', default=1, min=0, update=updateNode) - lB: IntProperty(name='lB', default=5, min=0, update=updateNode) - lC: IntProperty(name='lC', default=1, min=0, update=updateNode) + cycles: IntProperty(name='cycles', default=3, min=1, update=updateNode, description="Внутренние циклы обучения") + lA: IntProperty(name='lA', default=1, min=0, update=updateNode, description="Входной слой (должен соответствовать количеству элементов на входе)") + lB: IntProperty(name='lB', default=5, min=0, update=updateNode, description="Внутренний слой (больше узлов - точнее расчеты)") + lC: IntProperty(name='lC', default=1, min=0, update=updateNode, description="Выходной слой (должен соответствовать количеству элементов на выходе)") def sv_init(self, context): self.inputs.new('SvStringsSocket', "data") @@ -248,9 +234,7 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) 'k_lambda': 0.0001, 'Elman': Elman, } - print("initialize handle:", handle[0]) - print("******-----------**********") self.Elman = props['Elman'] self.Elman.gister = abs(self.gisterezis) self.Elman.k_learning = self.k_learning @@ -271,7 +255,6 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) props['InC'] = self.lC props['wA'] = self.Elman.init_w(props['InA'], props['InB'], props['trashold']) props['wB'] = self.Elman.init_w(props['InB'], props['InC'], props['trashold']) - print("Elman again ... By handle:", handle[0]) props['gister'] = self.gisterezis props['k_learning'] = self.k_learning @@ -282,17 +265,11 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) input_data = self.inputs['data'].sv_get() - print("pre etalon ", input_etalon) - print("pre data ", input_data) - if type(input_etalon[0]) not in [list, tuple]: input_etalon = [input_etalon] if type(input_data[0]) not in [list, tuple]: input_data = [input_data] - print("etalon ", input_etalon) - print("data ", input_data) - for idx, data in enumerate(input_data): let = len(input_etalon) - 1 eta = input_etalon[min(idx, let)] @@ -300,10 +277,6 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) if type(eta) not in [list, tuple]: eta = [eta] - print("\nPROCESS:") - pprint("data2={0}\neta={1}\nself.maximum={2}\nflag={3}\nprops={4}".format(data2, eta, self.maximum, - is_learning, props)) - result.append([self.Elman.neuro(data2, eta, self.maximum, is_learning, props)]) result.append(result.pop(0)) @@ -317,7 +290,7 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) # ********************************* class SvNeuroOps(bpy.types.Operator): - """ Neuro operators """ + """ Перезапуск узла """ bl_idname = "node.sverchok_neuro" bl_label = "Sverchok Neuro operators" bl_options = {'REGISTER', 'UNDO'} @@ -348,8 +321,7 @@ def unregister(): bpy.utils.unregister_class(SvNeuroOps) # TODO - Не нравится, что структура выходных данных не соответсвует эталону -# TODO - Сделать дескрипторы ко всем видимым элементам -# TODO - Количество входных элементов не должно соответсвовать количеству входных узлов А. Это сильно тормозит комп -# Придумать как решить эту проблему # TODO - Необходимо обрабатывать несколко объектов. Т.е. получил несколко объектов, так и выдавать несколько объектов -# TODO - Сеть получилась необучаема +# т.е. сколько объектов - столько обучений +# TODO - Добавить слот для обучения цепью узлов +# TODO - Выдлеить основные параметры и дополнительные -- GitLab From 1149b6ab2f80a56634a5295e882c744df7d2efc9 Mon Sep 17 00:00:00 2001 From: Alexander Nedovizin Date: Mon, 19 Oct 2020 14:08:32 +0500 Subject: [PATCH 05/15] =?UTF-8?q?ref=20(neuro=5Felman):=20=D0=92=D1=8B?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BE=D1=81=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BD=D1=8B=D0=B5=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D1=80=D1=8B=20=D0=B8=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D0=BD=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nodes/logic/neuro_elman.py | 131 ++++++++++++++++++++----------------- 1 file changed, 70 insertions(+), 61 deletions(-) diff --git a/nodes/logic/neuro_elman.py b/nodes/logic/neuro_elman.py index 868e4bec9..39d5d51ed 100644 --- a/nodes/logic/neuro_elman.py +++ b/nodes/logic/neuro_elman.py @@ -45,7 +45,7 @@ class SvNeuro_Elman: return out - def sigmoida(self, signal, prop_in): + def sigmoida(self, signal): result = (exp(signal).real - exp(-signal).real) / (exp(signal).real + exp(-signal).real + 1e-8) return result @@ -81,7 +81,7 @@ class SvNeuro_Elman: # TODO - Здесь можно поставить порог, ниже которого сигнал не пройдёт outB[idx_b] += signal_a - outB_ = [self.sigmoida(signal_b, prop['InB']) for signal_b in outB] + outB_ = [self.sigmoida(signal_b) for signal_b in outB] return outB_ def layerC(self, outB, prop): @@ -117,49 +117,49 @@ class SvNeuro_Elman: return (1 - prop['k_lambda']) * w + dw def learning(self, outA, outB, outC, etalon, maxim, prop): - list_wA = deepcopy(prop['wA']) - list_wB = deepcopy(prop['wB']) - list_x = deepcopy(outA) - for idx, x in enumerate(outA): - xi = deepcopy(x) + weights_a = deepcopy(prop['wA']) + weights_b = deepcopy(prop['wB']) + outA_ = deepcopy(outA) + for idx, native_signal_a in enumerate(outA): + processed_signal_a = deepcopy(native_signal_a) outB_ = deepcopy(outB) outC_ = deepcopy(outC) for step in range(prop['cycles']): - eB = [0] * prop['InB'] - eA = [0] * prop['InA'] - for idc, c in enumerate(outC_): - c_ = self.sigmoida(c, prop['InC']) - eC = self.func_ej_last(etalon[idc], c) + in_b = [0] * prop['InB'] + in_a = [0] * prop['InA'] + for idc, signal_c in enumerate(outC_): + c_ = self.sigmoida(signal_c) + eC = self.func_ej_last(etalon[idc], signal_c) f_vC = self.f_vj_sigmoida(prop['InC'], c_) sigmaC = self.sigma(eC, f_vC) - for idb, b in enumerate(outB_): - dwji = self.delta_wji(sigmaC, b, prop) - list_wB[idb][idc] = self.func_w(list_wB[idb][idc], dwji, prop) - eB[idb] += sigmaC * dwji + for idb, signal_b in enumerate(outB_): + dwji = self.delta_wji(sigmaC, signal_b, prop) + weights_b[idb][idc] = self.func_w(weights_b[idb][idc], dwji, prop) + in_b[idb] += sigmaC * dwji - for idb, b in enumerate(outB_): - f_vB = self.f_vj_sigmoida(prop['InB'], b) - sigmaB = self.sigma(eB[idb], f_vB) + for idb, signal_b in enumerate(outB_): + f_vB = self.f_vj_sigmoida(prop['InB'], signal_b) + sigmaB = self.sigma(in_b[idb], f_vB) - for ida, a in enumerate(outA): - dwji = self.delta_wji(sigmaB, a, prop) - print(f"list_wA={list_wA}\tida={ida}\tidb={idb}\toutA={outA}") - list_wA[ida][idb] = self.func_w(list_wA[ida][idb], dwji, prop) - print("eA", eA, "\tida=", ida) - eA[ida] += sigmaB * dwji + for ida, signal_a in enumerate(outA): + dwji = self.delta_wji(sigmaB, signal_a, prop) + print(f"list_wA={weights_a}\tida={ida}\tidb={idb}\toutA={outA}") + weights_a[ida][idb] = self.func_w(weights_a[ida][idb], dwji, prop) + print("eA", in_a, "\tida=", ida) + in_a[ida] += sigmaB * dwji - xi = xi - prop['epsilon'] * xi * (maxim - xi) - absdx = abs(x - xi) + processed_signal_a -= prop['epsilon'] * processed_signal_a * (maxim - processed_signal_a) + absdx = abs(native_signal_a - processed_signal_a) if absdx <= prop['trashold'] or absdx > abs(maxim / 2): break - list_x[idx] = xi + outA_[idx] = processed_signal_a - outB_ = self.layerB(list_x, prop) + outB_ = self.layerB(outA_, prop) outC_ = self.layerC(outB, prop) - prop['wA'] = list_wA - prop['wB'] = list_wB + prop['wA'] = weights_a + prop['wB'] = weights_b class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): @@ -170,19 +170,26 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) bl_icon = 'OUTLINER_OB_EMPTY' sv_icon = 'SV_NEURO' - Elman = None + elman = None k_learning: FloatProperty(name='k_learning', default=0.1, update=updateNode, description="Коэффициент обучения") - gisterezis: FloatProperty(name='gisterezis', default=0.1, min=0.0, update=updateNode, description="Задаёт порог действительных значений внутри алгоритма обучения (в планах)") - maximum: FloatProperty(name='maximum', default=3.0, update=updateNode, description="Максимальное значение выходного слоя") + gisterezis: FloatProperty(name='gisterezis', default=0.1, min=0.0, update=updateNode, + description="Задаёт порог значений внутри алгоритма обучения (в планах)") + maximum: FloatProperty(name='maximum', default=3.0, update=updateNode, + description="Максимальное значение входного и выходного слоя") menushka: BoolProperty(name='menushka', default=False, description="Дополнительные параметры") - epsilon: FloatProperty(name='epsilon', default=1.0, update=updateNode, description="Коэффициент участвует в функции оценки обучения") + epsilon: FloatProperty(name='epsilon', default=1.0, update=updateNode, + description="Коэффициент участвует в функции оценки обучения") treshold: FloatProperty(name='treshold', default=0.01, update=updateNode, description="Участвует в оценке обучения") - k_lambda: FloatProperty(name='k_lambda', default=0.0001, max=0.1, update=updateNode, description="Точность обучения") + k_lambda: FloatProperty(name='k_lambda', default=0.0001, max=0.1, update=updateNode, + description="Шаг изменения веса при обучении") cycles: IntProperty(name='cycles', default=3, min=1, update=updateNode, description="Внутренние циклы обучения") - lA: IntProperty(name='lA', default=1, min=0, update=updateNode, description="Входной слой (должен соответствовать количеству элементов на входе)") - lB: IntProperty(name='lB', default=5, min=0, update=updateNode, description="Внутренний слой (больше узлов - точнее расчеты)") - lC: IntProperty(name='lC', default=1, min=0, update=updateNode, description="Выходной слой (должен соответствовать количеству элементов на выходе)") + lA: IntProperty(name='lA', default=1, min=0, update=updateNode, + description="Входной слой (должен соответствовать количеству элементов на входе)") + lB: IntProperty(name='lB', default=5, min=0, update=updateNode, + description="Внутренний слой (больше узлов - точнее расчеты)") + lC: IntProperty(name='lC', default=1, min=0, update=updateNode, + description="Выходной слой (должен соответствовать количеству элементов на выходе)") def sv_init(self, context): self.inputs.new('SvStringsSocket', "data") @@ -192,22 +199,24 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) def draw_buttons(self, context, layout): self.draw_animatable_buttons(layout, icon_only=True) handle_name = self.name + self.id_data.name - layout.prop(self, "k_learning", text="koeff learning") - layout.prop(self, "gisterezis", text="gisterezis") + + col_top = layout.column(align=True) + row = col_top.row(align=True) + row.prop(self, "lA", text="A layer") + row = col_top.row(align=True) + row.prop(self, "lB", text="B layer") + row = col_top.row(align=True) + row.prop(self, "lC", text="C layer") + layout.prop(self, "maximum", text="maximum") - layout.prop(self, "cycles", text="cycles") op_start = layout.operator('node.sverchok_neuro', text='Restart') op_start.typ = 1 op_start.handle_name = handle_name layout.prop(self, "menushka", text="extend sets:") if self.menushka: - col_top = layout.column(align=True) - row = col_top.row(align=True) - row.prop(self, "lA", text="A layer") - row = col_top.row(align=True) - row.prop(self, "lB", text="B layer") - row = col_top.row(align=True) - row.prop(self, "lC", text="C layer") + layout.prop(self, "k_learning", text="koeff learning") + layout.prop(self, "gisterezis", text="gisterezis") + layout.prop(self, "cycles", text="cycles") col = layout.column(align=True) col.prop(self, "epsilon", text="epsilon") col = layout.column(align=True) @@ -220,7 +229,7 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) handle = handle_read(handle_name) props = handle[1] if not handle[0]: - Elman = SvNeuro_Elman() + elman = SvNeuro_Elman() props = {'InA': 2, 'InB': 5, 'InC': 1, @@ -232,12 +241,12 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) 'cycles': 3, 'trashold': 0.01, 'k_lambda': 0.0001, - 'Elman': Elman, + 'Elman': elman, } - self.Elman = props['Elman'] - self.Elman.gister = abs(self.gisterezis) - self.Elman.k_learning = self.k_learning + self.elman = props['Elman'] + self.elman.gister = abs(self.gisterezis) + self.elman.k_learning = self.k_learning result = [] if self.outputs['result'].is_linked and self.inputs['data'].is_linked: @@ -253,8 +262,8 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) props['InA'] = self.lA + 1 props['InB'] = self.lB props['InC'] = self.lC - props['wA'] = self.Elman.init_w(props['InA'], props['InB'], props['trashold']) - props['wB'] = self.Elman.init_w(props['InB'], props['InC'], props['trashold']) + props['wA'] = self.elman.init_w(props['InA'], props['InB'], props['trashold']) + props['wB'] = self.elman.init_w(props['InB'], props['InC'], props['trashold']) props['gister'] = self.gisterezis props['k_learning'] = self.k_learning @@ -277,7 +286,7 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) if type(eta) not in [list, tuple]: eta = [eta] - result.append([self.Elman.neuro(data2, eta, self.maximum, is_learning, props)]) + result.append([self.elman.neuro(data2, eta, self.maximum, is_learning, props)]) result.append(result.pop(0)) else: @@ -302,10 +311,11 @@ class SvNeuroOps(bpy.types.Operator): if self.typ == 1: handle = handle_read(self.handle_name) prop = handle[1] - Elman = SvNeuro_Elman() + elman = SvNeuro_Elman() if handle[0]: - prop['wA'] = Elman.init_w(prop['InA'], prop['InB'], prop['trashold']) - prop['wB'] = Elman.init_w(prop['InB'], prop['InC'], prop['trashold']) + prop['wA'] = elman.init_w(prop['InA'], prop['InB'], prop['trashold']) + prop['wB'] = elman.init_w(prop['InB'], prop['InC'], prop['trashold']) + prop['Elman'] = elman handle_write(self.handle_name, prop) return {'FINISHED'} @@ -324,4 +334,3 @@ def unregister(): # TODO - Необходимо обрабатывать несколко объектов. Т.е. получил несколко объектов, так и выдавать несколько объектов # т.е. сколько объектов - столько обучений # TODO - Добавить слот для обучения цепью узлов -# TODO - Выдлеить основные параметры и дополнительные -- GitLab From 1b9c505cdf68ef33372dfda70f238d172a3babfa Mon Sep 17 00:00:00 2001 From: Alexander Nedovizin Date: Mon, 19 Oct 2020 16:11:33 +0500 Subject: [PATCH 06/15] =?UTF-8?q?ref=20(neuro=5Felman):=20=D1=82=D0=B5?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D1=8C=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82?= =?UTF-8?q?=D1=83=D1=80=D0=B0=20=D0=B2=D1=8B=D1=85=D0=BE=D0=B4=D0=BD=D1=8B?= =?UTF-8?q?=D1=85=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D1=81=D0=BE?= =?UTF-8?q?=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D1=81=D0=B2=D1=83=D0=B5=D1=82=20?= =?UTF-8?q?=D1=8D=D1=82=D0=B0=D0=BB=D0=BE=D0=BD=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nodes/logic/neuro_elman.py | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/nodes/logic/neuro_elman.py b/nodes/logic/neuro_elman.py index 39d5d51ed..7776faf0f 100644 --- a/nodes/logic/neuro_elman.py +++ b/nodes/logic/neuro_elman.py @@ -33,10 +33,6 @@ from cmath import exp class SvNeuro_Elman: - def __init__(self): - self.gister = 0.1 - self.k_learning = 0.1 - def init_w(self, number, ext, treshold): out = [] for _ in range(number): @@ -78,7 +74,6 @@ class SvNeuro_Elman: for idx_a, weights_a in enumerate(prop['wA']): for idx_b, wa in enumerate(weights_a): signal_a = wa * outA[idx_a] - # TODO - Здесь можно поставить порог, ниже которого сигнал не пройдёт outB[idx_b] += signal_a outB_ = [self.sigmoida(signal_b) for signal_b in outB] @@ -89,7 +84,6 @@ class SvNeuro_Elman: for idx_b, weights_b in enumerate(prop['wB']): for idx_c, wb in enumerate(weights_b): signal_b = wb * outB[idx_b] - # TODO - Здесь можно поставить порог, ниже которого сигнал не пройдёт outC[idx_c] += signal_b return outC @@ -144,9 +138,7 @@ class SvNeuro_Elman: for ida, signal_a in enumerate(outA): dwji = self.delta_wji(sigmaB, signal_a, prop) - print(f"list_wA={weights_a}\tida={ida}\tidb={idb}\toutA={outA}") weights_a[ida][idb] = self.func_w(weights_a[ida][idb], dwji, prop) - print("eA", in_a, "\tida=", ida) in_a[ida] += sigmaB * dwji processed_signal_a -= prop['epsilon'] * processed_signal_a * (maxim - processed_signal_a) @@ -245,9 +237,6 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) } self.elman = props['Elman'] - self.elman.gister = abs(self.gisterezis) - self.elman.k_learning = self.k_learning - result = [] if self.outputs['result'].is_linked and self.inputs['data'].is_linked: @@ -286,11 +275,9 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) if type(eta) not in [list, tuple]: eta = [eta] - result.append([self.elman.neuro(data2, eta, self.maximum, is_learning, props)]) - result.append(result.pop(0)) - + result.append(self.elman.neuro(data2, eta, self.maximum, is_learning, props)) else: - result = [[[]]] + result = [[]] handle_write(handle_name, props) self.outputs['result'].sv_set(result) @@ -311,11 +298,10 @@ class SvNeuroOps(bpy.types.Operator): if self.typ == 1: handle = handle_read(self.handle_name) prop = handle[1] - elman = SvNeuro_Elman() if handle[0]: + elman = prop['Elman'] prop['wA'] = elman.init_w(prop['InA'], prop['InB'], prop['trashold']) prop['wB'] = elman.init_w(prop['InB'], prop['InC'], prop['trashold']) - prop['Elman'] = elman handle_write(self.handle_name, prop) return {'FINISHED'} @@ -330,7 +316,4 @@ def unregister(): bpy.utils.unregister_class(SvNeuroElman1LNode) bpy.utils.unregister_class(SvNeuroOps) -# TODO - Не нравится, что структура выходных данных не соответсвует эталону -# TODO - Необходимо обрабатывать несколко объектов. Т.е. получил несколко объектов, так и выдавать несколько объектов -# т.е. сколько объектов - столько обучений # TODO - Добавить слот для обучения цепью узлов -- GitLab From dd17f137fcbd16fb3660e55d3168c79bab99b615 Mon Sep 17 00:00:00 2001 From: Alexander Nedovizin Date: Mon, 19 Oct 2020 16:43:18 +0500 Subject: [PATCH 07/15] ref (neuro_elman): translate it --- nodes/logic/neuro_elman.py | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/nodes/logic/neuro_elman.py b/nodes/logic/neuro_elman.py index 7776faf0f..d391b49c5 100644 --- a/nodes/logic/neuro_elman.py +++ b/nodes/logic/neuro_elman.py @@ -32,6 +32,7 @@ from cmath import exp class SvNeuro_Elman: + """ A set of functions for working with a neuron """ def init_w(self, number, ext, treshold): out = [] @@ -46,7 +47,10 @@ class SvNeuro_Elman: return result def neuro(self, list_in, etalon, maxim, is_learning, prop): - outA = self.layerA(list_in, prop) + """ The function calculates the output values depending on the input """ + + _list_in = [signal_a/maxim for signal_a in list_in] + outA = self.layerA(_list_in, prop) outB = self.layerB(outA, prop) outC = self.layerC(outB, prop) @@ -164,24 +168,25 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) elman = None - k_learning: FloatProperty(name='k_learning', default=0.1, update=updateNode, description="Коэффициент обучения") + k_learning: FloatProperty(name='k_learning', default=0.1, update=updateNode, description="Learning rate") gisterezis: FloatProperty(name='gisterezis', default=0.1, min=0.0, update=updateNode, - description="Задаёт порог значений внутри алгоритма обучения (в планах)") + description="Sets the threshold of values inside the learning algorithm (in plans)") maximum: FloatProperty(name='maximum', default=3.0, update=updateNode, - description="Максимальное значение входного и выходного слоя") - menushka: BoolProperty(name='menushka', default=False, description="Дополнительные параметры") + description="The maximum value of the input and output layer") + menushka: BoolProperty(name='menushka', default=False, description="Extra options") epsilon: FloatProperty(name='epsilon', default=1.0, update=updateNode, - description="Коэффициент участвует в функции оценки обучения") - treshold: FloatProperty(name='treshold', default=0.01, update=updateNode, description="Участвует в оценке обучения") + description="The coefficient participates in the learning assessment function") + treshold: FloatProperty(name='treshold', default=0.01, update=updateNode, + description="Participates in learning assessment") k_lambda: FloatProperty(name='k_lambda', default=0.0001, max=0.1, update=updateNode, - description="Шаг изменения веса при обучении") - cycles: IntProperty(name='cycles', default=3, min=1, update=updateNode, description="Внутренние циклы обучения") + description="Weight change step during training") + cycles: IntProperty(name='cycles', default=3, min=1, update=updateNode, description="Internal Learning Loops") lA: IntProperty(name='lA', default=1, min=0, update=updateNode, - description="Входной слой (должен соответствовать количеству элементов на входе)") + description="Input layer (must match the number of elements in the input)") lB: IntProperty(name='lB', default=5, min=0, update=updateNode, - description="Внутренний слой (больше узлов - точнее расчеты)") + description="Inner layer (more nodes - more accurate calculations)") lC: IntProperty(name='lC', default=1, min=0, update=updateNode, - description="Выходной слой (должен соответствовать количеству элементов на выходе)") + description="Output layer (must match the number of elements in the output)") def sv_init(self, context): self.inputs.new('SvStringsSocket', "data") @@ -201,7 +206,7 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) row.prop(self, "lC", text="C layer") layout.prop(self, "maximum", text="maximum") - op_start = layout.operator('node.sverchok_neuro', text='Restart') + op_start = layout.operator('node.sverchok_neuro', text='Reset') op_start.typ = 1 op_start.handle_name = handle_name layout.prop(self, "menushka", text="extend sets:") @@ -286,7 +291,7 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) # ********************************* class SvNeuroOps(bpy.types.Operator): - """ Перезапуск узла """ + """ Resetting weights """ bl_idname = "node.sverchok_neuro" bl_label = "Sverchok Neuro operators" bl_options = {'REGISTER', 'UNDO'} @@ -315,5 +320,3 @@ def register(): def unregister(): bpy.utils.unregister_class(SvNeuroElman1LNode) bpy.utils.unregister_class(SvNeuroOps) - -# TODO - Добавить слот для обучения цепью узлов -- GitLab From cdae3384d59949568ae24ed1ce415200301f49e7 Mon Sep 17 00:00:00 2001 From: Alexander Nedovizin Date: Tue, 20 Oct 2020 17:11:00 +0500 Subject: [PATCH 08/15] =?UTF-8?q?doc=20(neuro=5Felman):=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=83=D0=B7=D0=BB=D0=B0=20=D0=BF?= =?UTF-8?q?=D0=BE-=D1=80=D1=83=D1=81=D1=81=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nodes/logic/Description.md | 88 ++++++++++++++++++++++++++ nodes/logic/neuro.png | Bin 0 -> 43932 bytes nodes/logic/neuro_ansumble.png | Bin 0 -> 48880 bytes nodes/logic/neuro_data_in.png | Bin 0 -> 31231 bytes nodes/logic/neuro_data_in_text.png | Bin 0 -> 22556 bytes nodes/logic/neuro_etalon.png | Bin 0 -> 18856 bytes nodes/logic/neuro_result.png | Bin 0 -> 70944 bytes nodes/logic/neuro_training_result.png | Bin 0 -> 25305 bytes 8 files changed, 88 insertions(+) create mode 100644 nodes/logic/Description.md create mode 100644 nodes/logic/neuro.png create mode 100644 nodes/logic/neuro_ansumble.png create mode 100644 nodes/logic/neuro_data_in.png create mode 100644 nodes/logic/neuro_data_in_text.png create mode 100644 nodes/logic/neuro_etalon.png create mode 100644 nodes/logic/neuro_result.png create mode 100644 nodes/logic/neuro_training_result.png diff --git a/nodes/logic/Description.md b/nodes/logic/Description.md new file mode 100644 index 000000000..1186f1d06 --- /dev/null +++ b/nodes/logic/Description.md @@ -0,0 +1,88 @@ +# Neuro Elman 1 Layer + + + +

Functionality

+

+Однослойная нейронная сеть с обучением. На вход подаются входные данные и ожидаемые выходные. +Необходимо сеть обучить на наборе данных. После обучения можно использовать этот узел для вычислений по новому набору. +

+Описание алгоритма +

Перед использованием узел нужно настроить. Сначала настраиваются обязаельные параметры. Дополнительные парметры можно не трогать без необходимости. +После настройки узла и поключения связей можно приступать к обчению. +Узел обучается при каждом обновлении. Обновить можно с помощью кнопки или запустить анимацию. +Последний вариант удобен тем, что можно просто ждать пока узел обучится, и затем остановить анимацию. +

+

+Формат данных:
+[obj1, obj2, obj3, ...]
+obj = [...]
+[[...], [...], [...], ...]
+т.е. уровень списка объектов. Каждый объект содержит список значений для одной порции обучения. +Т.о. предварительно подготовить данные и запаковать их в объекты, а затем подать на вход. На вход etalon нужно подать +такое же количество объектов, чтобы обучать сеть. На выходе получим такое же количество объектов с результатом работы сети. +

+ +

Category

+Logic -> Neuro Elman 1 Layer + +

Inputs

+
    +
  • data - входящий набор данных
  • +
  • etalon - ожидаемый набор данных
  • +
+ +

Outputs

+
    +
  • result - результат преобразований
  • +
+ +

Parameters

+
    +
  • A layer - количество нейронов первого слоя, равно количеству входных данных в объекте
  • +
  • B layer - количество нейронов второго слоя, это внутренний слой
  • +
  • C layer - количество нейронов третьего слоя, равно количеству значений в объекте на выходе
  • +
  • maximum - максимальные возможные значения, которые предполагается использовать на узле
  • +
  • koeff learning - темп обучения узла (не страшно менять)
  • +
  • gisterezis - запланирован для установки пороговых значений при обработке сигналов (пока не используется)
  • +
  • cycles - количество циклов обучения узла за один прогон
  • +
  • epsilon - восприимчивость обучаения узла
  • +
  • lambda - шаг изменения весовых коэффиуциентов
  • +
  • treshold - порог, предотвращающий переобучение
  • +
  • Reset (button) - сброс всех весовых коэффициентов
  • +
+ +

Usage

+Постановка задачи +

+Необходимо обучить сеть операции XOR:
+[1, 1] = [1]
+[1, 0] = [1]
+[0, 1] = [1]
+[0, 0] = [0]
+

+Подготовка набора данных +

+ + +
Аналогично подготовим ожидаемые данные
+ +

+Подготовка узла +
    +
  • A layer - задаём значение 2, т.к. на вход подаются значения парами
  • +
  • B layer - поставим 5, но может быт любым (экспериментируйте)
  • +
  • C layer - задаём 1, т.к. на выходе должны получить результат в одно число
  • +
+ +
+Запускаем анимацию и ждём минуту. Затем выключаем анимацию. У меня получился такой результат: +
+ + +

+Давайте проверим результат обучения.
+ +
+

+ diff --git a/nodes/logic/neuro.png b/nodes/logic/neuro.png new file mode 100644 index 0000000000000000000000000000000000000000..6f49699162959c69759f33c84e824b5d7eefc75b GIT binary patch literal 43932 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 literal 0 HcmV?d00001 diff --git a/nodes/logic/neuro_data_in.png b/nodes/logic/neuro_data_in.png new file mode 100644 index 0000000000000000000000000000000000000000..3f20bd11bf7d3a7b1030131fa0e5bb1ea5e3da99 GIT binary patch literal 31231 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 literal 0 HcmV?d00001 diff --git a/nodes/logic/neuro_data_in_text.png b/nodes/logic/neuro_data_in_text.png new file mode 100644 index 0000000000000000000000000000000000000000..dcb1641879ee3ffa80c1837fe0ebebfa0f811950 GIT binary patch literal 22556 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 literal 0 HcmV?d00001 diff --git a/nodes/logic/neuro_etalon.png b/nodes/logic/neuro_etalon.png new file mode 100644 index 0000000000000000000000000000000000000000..14127e1250b9a8456cd3085496829dc6662bb9b9 GIT binary patch literal 18856 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%0DHX!Wb$ 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 literal 0 HcmV?d00001 diff --git a/nodes/logic/neuro_training_result.png b/nodes/logic/neuro_training_result.png new file mode 100644 index 0000000000000000000000000000000000000000..bfad618c4a5ca05fe713689aee151875e6b798cb GIT binary patch literal 25305 zcmbTe2RPP!`#*kVhma(dm8@i3*;$trLdec0A)D-(orLVYlB{HhY*&&^_9iQ2XRrV1 zexCbzzR!0YzvK8j?z8}zt8iv&QGwCg7hW)8~6wW;?hGINo54$!gKgv9uEUP z6X-IU48L8pm3i_4fgt*N{{MxTyF@n;2wKELNikKI-tz8_j}{Fr7M%n< zl`P7yzQ(A_!@$6x+rq~o702^`>t7>d@8$h_*CjFTAz4=K(Y8j(w(!)+#L=8bx5&}& zb?2vN>t`n@k_*(~K?>O@%~rDjUG{4s&2DA99TB#3kCFs$_5_EBtx~2`9`q1T>lI{P z!MYqw?n_HuXvD z#kloe^?IG)y?bILSm7-pAt5jLDd(<=T;nyMATMZ)pd>Yu@bvVYYkK^=F54p~jgG38 zmSp=nWlMm#p|^MagmsX&b5f^C>Bx^CKgij2h6e|E@7=q=@WS4np0u?&9K2$>E_R7 z0&-S^(vg#s6Dun#E-o&_%LgIkSINm=OVX8&jE|2C2?@!IaEtL%c5ThKvyrzKXjlAp zs@A{Tq?weK)@{sLs9#TQ=H%_|EiNu@XlQ6*k>6@;RIHh=QTTbpG9@Jiexz&`ClAlg zk1V;3hNdR*1bHbdo5znY2O1i?qfY+x;T;_Z{Yl04!3!8#Nl8uZf>rD2FfJXT2yEOs ze@h|cSy@^4C)wOwfENpC{=I>?bM{C_HWaw{DQW82)&J@J78rxS1<&4P1vKEi6K6&!w&Ye3B z0>bcPn3%FFE8|;c#auI#WT<~RRiBI|MMjE$t|%?#+7gkTCHflf9~cRs z;W|_}!{OiOA0N9HF%f3vTJ~>{f`W1+SSboE$d1`ftgdTrwR&4zHDuReO^`cQ%&b9} zJ{!BZa8*}ZHbqNuac~fb%*;&KXpiLO$?yZNT)9GsbNkMn;Fj4ZtmH|ZQo;+wy&N+D8@q#$HYe*0FGNRto;%{S#y>b7Gpkm9xUgQ1>@mPM>!hpV;Q zvJ(HPgF`g!t9S3{swb=~#>%x;VIMtVjaA5gQKh4heT90szkklYif*OX{pEt}WfYDX zx7LFP&5;apl{)O9QgSjfO1Y{|)l`#ZM@L6dk&&-MLR!9k`>1|bjD$TdzoLSVgM;Jt zZ9gai6pW<7(XtF`+3oYoD=XS1#;v~C1o85W$%1h-z_^!7gc*&GrT6$Nh&u7Qh_ z^ZQLfgn^~y@6v7&xrYy*R6DU96p=)WTI4cfC)OG?V(j2|Ql7*Va`pRKfYbdtLl{q|-`O}iBo6fh8FTC4s2{qR~G zI+da#7_c?2Bb1&zse0N%bR%?O`yeqXX??s(!UH$D(ar;Q0r!nd%R)}SHK!wy`v=Pd z`5q$PQ+1y3S%mG$;m+x)*OrDa?YEW|#bo}?uU8a5YFB(JF7CDD#kG=AvUrHmS?9Dm zy0L*oh-UXad-iO}K_I(tY18G~w{N6ZuE0$jx8`%59xTv??W6B57ESPtcKD`E&E;U7 zx%StYT6)6L7R8HQf%i#MGZ`iyUp&K8pbV9o-E@&>?6a;w<3_ogn;R(FM=W_M zsxLFQnv}W+y2Y*Zgze(wmw-Gwwtg`gfoC z2xk;2Z#dI>3GI8-AyqDlC8VSTJdHx~r*wVSm+0u|z#<~2=8uR!F(4+yIv~ROX?W$@ zwF>hAmI#?SjnhuPsW)%l2$4n^z4Yq7XdGGfHd%1yz(7K^>3iUrAn)+%?%JAlr9pJt z*RNPS8_o(=mEMMjnBF8OmxXvy9){dg_l9^o9;3c`{4CS5Qo5dFCGrOoT7Hk978b^3 zg740>B(F3@>o9#pzhZ1r;bGB{Qx6M{{`jF>I5ajodYDeu#RIKw-X8nYYE=6?!8La7 zq)tBTaToePVN&%%J>mQJM}ZDyDW*ag zGDCA8Y86M#hPb^w=Z;l^Y!>YMqob*_(~Z^3_yKx_e4kHi(w_Q>e|yi%%bP0Th%Z1; zrE|K~&T);5Z2#E`G(EXTkA&^#0GM13X$~Ty^1Yt(-9D-{IyqTBHmP$VG4V!L;e)K=p>RhG1F=Yy^J$;ruiDCoLhU@3KLTp|cH{ngNo$R|8;?N>vZ(P(r(B1q7A zO8;Io~NU!;6cY9RpwvLXW^A*w}D*H24@s zU%GT@qv2V5Y;#MCil8C%B$LvFPLsvO#hanuqL>t$^4iG~wA6V8X zAF-S)c_yc=ee+EbAQ|ln>sr_C4@%60La~-64;}=JST5M|V`F2_REPPu%vuc>Wz^T7 zEp#UJn?fTpE!V<)DoTKlFCZv5V`Q7zJ3KUmD<>Xf!JXLSE%TK)u=+*T_3PJf@>#30 z!~if^USBWF%WH$PhG5mN^BDVVRbf3L;J(WWnEGHoZuaL-1mdp7CmpDT@=x_OHRB^9 zF6^*sf41yS6}}Pr;qzxF50B&KYx>cx#$M%-j=Gh$K3Z`)?0gi2i(M(z4oi{Z87{jc zrny`A0Y9PeX%*})Wv6}0%OeeGUhGawi;qA5*D4)$glLv>W1fY%d5)UtvuDC*$J;*P zw*WaD930FkCybBl2&7E*_Ck*&;u49#Z~aWq#H7ti9wQqQ9gT(1EHY?>QZ6Samw^)_ zi@mq*k2_iQqNVVPfdnTPSD{|5+sYu@57Gj4i*l`*Hxkayd>xf58s(z2$Qz;6&g)Ql z5igliUBu}k2#JWAPDJ8}y9QIWnSP zjFHV!U?2+%3v{4Dohski{psoH zLa&{C*mP+qZ?AzoHPi0YfL1b|8=ZyTCl&}qsMJ{5^S-JVi;0Pe2n2vLx(GA)DxcOk zLtX0d?7~9gK^{QQ^KDn{k74U=t)HE)8x;?mabqAps#`cZ@}wxNudKAUw?n7oclu3% zNUyI)!N={}nbpfB`RFypWRmw$ztB zZ+`%g13nWk|3NDA7O_r+HC3q8_6io~Q*jD$$J=5gX`Z_y84^LTYk-QVM75IX5znRS z;?~3W08~v8a@{&V*k~q3#z~LuN4!ZXad8#yd)7f{u~cUgOE>J)N~QS-iZ}aW8^Tj! zq3*Xzk-qEe5AO>Kwi_UQV=)m1Rb#7+-pcs{VlR@h;k^#md)IfGoS(}9^PK~a`u%2( z@3{CV*ZM*LrCL0y6nW+>Q19J$f6r{Xu*9^Pmq+Sxs%lRkhiDbRseK(DehohWs-k(h z02f!EN$K-)t+@6F)W0@e461WtB_lUiQzv9dBqcnucze-JG*O(6*_?=KK6mR`#`!87@M!Kma+-)c$|#<$R${jL4!Rz8Vv42Lau^VISIK8mz3C>nBeHC&iMdGjNrTQp_WL62k}xW zb9J)T-O^G%yAS?w^s6_s$4@Cd6ngiIwehNxqdhK)H|M-q)T;E5-x`1@E%37(~8<{rw?3n~#rgY;`w@ z&*qbMMOd@Zfk$0QNr}HdmM^U(ueQ7U5nMF`X>j-A_JIc+I3UOyUNj}_2t+wM99>lw zPZ1iw#^I7@1b1*yqBH3qnuKJG2Pgs`=c}{C;1W@$_bp8#bl5e3C_j;_LZGH)jZQwR~(k-=H_jkoodWvB553gg4(&N zynK8r?e_>XWBbg?zMg+bA`sy%a`N(TLPBmAT>71?)DeL!xg~BWu=5SCB6j;oOGTyB zd3|!~c!7^Sj=*bRWoH9@dUE7_G&c1`hrL#Bs;>`oUNJ?W{Ao*=L=cgfYvB-V>XD3$ zTc~X8fZC}`B+~@{34-cv` z^kckjW@W|3!7*gU4XDY>5u4>>e!d?koCF4jXJ%%2Ep}<$d_qF3aqW%*RL4Bg3_h_E zz(C6_h5&`{9Ih0?)~T5C5>%3~uvh^t1GPWx2Q-heB|kr(m`b1w$}E(jBPzKy8N51o z>YBwTfoXP>P%GDK_a=QXaVZF;baf{{#efElAHz=>c6fLQTx^z~C_8A{2P6eh1OTV` zw$B@JCOA4e-U!8M*;JZ`-NSD?jVQC~`|v1<*UH?&!mlvDcAIurh^3r5d@*7S>3ps{ zJ+D)y4sV&af5dpjF$@!31S?QDBsbxObECzm*k3%OeZEAKwIBBa3PZceq!b(DLdOo} zaHNbqLy;z{NZR_QOOpoGw?NSVV{PaQx7XbSQc|I}cPk(=lE}+$(rocycE5rW9Ho@u zf1ff8I&V^^7gHE|#0x9g&`B*ia1a4~#dVb2MY;7PL5PWgz^8eIT#@xNpKUz6*L?ZjvunXZ%#kD^;F zhQ^pBhIJz(dhw?Xm`BuVk{jq^!!Z9v=4e3{!*fyb$ooDHjd1DzAP@gPUi+Wl^3!ZF z1X*%n1UY4i$MFXK7Jz)6nPPEMiPDM?R&K9WSNuAm6r5lHwEUDfevOvA(wexfKo^;q zn5wI*GlhGIBV<5Jx#+ub;6W7h)Xi;F5rIZl>44nuls8F5SvhBZgZV}%FGyv=!k3zJ zs;wl7|NL>tP~yLL@1Bs5N7~>diY|g#L?o3KujK3OCIw-j`z|H|(P9@Mev1r$!g_CR z?tQPBzuR=NUSXV6=3__SBBsRdMJ@_LU)t|(+1c4tM7RUIj8VBt%s*#mt$4?PlsZP4 zN61KK_k~K`M$m$|l8TX64m(&qf55yPr#zVjbi%&AK35^V9<9p1loV%mQ_cj^U}Fad zvbE2i-8hNzAC%M@>dEgApFQ5#?&u%{K@T%mEj%>TRfu}a16w$JgW9@S^S6_r+QMmJ zwRDs2R77m-XXkZ2c&qpCx6W=#()9w)V%Pmb7V`y)9Anh=jP>C<&m-XI0M9VJ^Kx>S znVD_*DJcSrM=UGGJVE9wtUpa0SG^B9UV{%N=qcWZeQ8A0LU;srlt8ZM(ms}#m)FTgtV_O{ai1P^dlQWk!`Yqt z)O-K_eE{Q6OGh@QSR-VBbLXmLOG!xqc)=$iz;p~m^#TaLPD67oSh7fuvIP_rt%6ff zE~c^T9hQDrjeUl@04xjinC!lKz_6b_vAehcdyt_QI7fxF015f{_P$5lrVhtF%~Q_( zY(3%j=U1;%Y?_d(a(3SXWjVls&^hY&e-da$CMO^N4BA2z1XdCb9i`| zA`c(O@A3jo^Nj6x9OZnkqt%K~si!$2Ox?HP_tFs{T>}FH8(!p-qX!+jQ|DcSh?rPI zLqlSnf`+Dh#&%6baKIFojtpOznm7>fo@nvRjG;^5FNZGx2y0xo0US-bE>cxb5FtSK z0XPg4m^0xwvG+cv(EE=cEn!K#_t7-peMVFig|VAKoc_M~0OV0~^W})!(yZhmP@Wuq z^)xhyLKC78tkvTvd$HDI#@+8t|Ih$cv(KYSNi1?Ec&7XnHz5ZGLBG2jnv7_~%Px@E|5824Fu=f_w%mFm-{Hu#fXV zYoQsMu@MDHWGU-b**Dviks4y6ReOhquI-1vV+lVHYI+gz_U*>_i*8umRqwMsZ?v{x z_raiZ&(a_0nBTrh*_#`KM?h%>ZPwQp1CBb9qALxBx_|#-I~W;qva(RfC#=^&7qPbf zkhieua+BBc*ZO+B>-NI`f`Wo(DzAx; z!r22k*=9;XPVNZU)k7a($eS)Tu&D~4lzy}1ZE0?1)BOS};o#t4Y%DqRmEq%8ib|DU z!Wq`+uLYrTI{W4Qgxq_gLp6^+TDsM>h z9eg)neveSQ-s?n~#*<6})BAKgEhz6@VIjx(^GX{ylAxM^kAl{|`Dcp1u=0rBk~5*L zy&cd26obj9aUA+}uu`x?QiR=On~iGW6avLSyo7fvyxqZtA@n%b!r#Ot|aWz-d9J-!F%>dlqncD6&Nrl>L{3Dl7Q|#4npv zlBt@;U%7<%-r5T1aC%*zyHRgM5&QNn;*87i-Mi{)LDlV(k7_J2^=BvRt%X3nm=se9`-ppBu+1gKl#UIUlD|6H0icd0H#M-SsA!wz?TH? z->=Hb3P8^QJr=#5)}5`M4r03Das2Tu@zAVlwbc+r0nCizPT zf3KXY!;W&@q7O9GE8GJH%o4-W=|MfqTLxY2D^Y%D?c3?s=L+^l+jyYA@4^}51pBz1D{f%22CB!^syDmbV zot;p_K{W|tm|;UXuj$N{CxcA5F@sJ>NSJf5%)#;68PI@@U*uEFVX?G$;7Ro@ebTG_0&fg1_ZLQP zmyMHCY@!xG_ski81+p|*cD@s@If&|UX!AL)p^9I0$OMHBEW{5tYD!4b-Z}- z;>HItQdvvjTdPhgg?gYdmyXc!JvA_BFe!x%0}BO*y?=5Zf`&O(H;PRi(| zJR?_vJXA7~G(}eOsP4s$-D;aD5f`WQu2v4Fqq4uV0IjVJA@m!P=uK~ZeHzz!P>A+B z4-(`V)4Jop1j}XvuZi{*^4rnD%0{fTT1c;1jos|Gz)LsH&CQ$miavZW0Ry~etes@eiI%J9zsYn z@NZQX2Gi0k<)yD*{acOc@aPyA0+RU{z+(gXajf1O<=0pVhkb62UW`PmfOlgAtII~( zh#}ArmIhV|pcWi?a~qqWJvA8sN3vOT-B8mfC;NS ziuM(BB>sm&0s^ur`~G~~C7HYzV@ z>4L=lGO-4m6Bbps&LiRD<(5r=E2pQY-`8=W4t|aW3Oc0c&IYh7^-@P`tIwqx)2k7M zsjq#Yw!*))wY7mk8`4bLrnPU*(P7ah-BpqKgtEnXbu=b6_L~6`Nf;$V4;6OEyqq_w zAV1$?;)^4O4+32T0zb%agM;cp=-!c$1K99#S;~ZHTS`SmMWz^Y?!>(*Z|~;Ua1yVA za*~<(6iOy%0%6?%{5-fz2t?@!&{{A~Lz?j&=xp%?;O+?vdxD(ZExb40)AP33C^#g< z0*vr%TliKm+4BOElarA~Y;0^*RaJ2L8y8#}eX(u%QxXym0KkA8gp!-y;>t^biuds0 z!}13QDOTL?1- z27Q%XqCjUtD`ZLBXW~ zlKO`Z%8E+uGg;z;7-x=R7PmlT0#L+$=Z=s5ZA$}HHOU7#+cH_@<&IFYKz_~m=vY0G zaT>ZEWYa>0B~~=@8xxnPXUQSF1#N%?eQ~BKiOaO>_eAv`U;V+QKP@~wJR9tuhkuqp zR{nXdem`Ks8uUxRPB%gW9il)52Tt#Yub3uM3+h7}2&YPZLo1+?vLdE|xG9Pp%vluH z!jet`qK0GqgVmQ71TPNn1G%*BMF)XPI1;+Lx+*Gtie6h+%C#=(7e+cbIDFKtCf9r0 zgNTv6Dh1kv9Agx$&I@q%Ta5uo5nZ};0YOSiN{0VndUg$B3b1dmSC40D&ddN%I~@T# zDJd;&y>27}3KU#~^Y7tCz~|#tD*F1wf-Gj+xea3D`Gs||v6T~RsN)%8v7?Nts_S2n znZ5gfk+Vulwqi8&eEe?v(tF~Ti+XrqEMm9>g6Z#Pu(MGic(rfhcc}jAkeLBLUFcuSTXU8 zo_Txl%C`>RI5`R*(9@*K^xN}O`iL6vCapRNk^vTp8!*r6()aH@KHlyQ4-Z$l=0+*x zqLkeSyoZ625o~iXv+}NsCDBOq`F;)q_JoCz)@{n0lv^4o79du1<)n##qYU6edHDk~ z%-_PxuEY}Yg9lI6Oxccy0`eF-o)B41Z+D}nMn)cX4F%>Jg`Gwja^q?VdjEXVRJP`h za;ep;uOyCyLzceS4aRIh>K>5&&V1LWLFk!17Hf!>w8h-r6H=ll1rr!>LIlCPTXUfd zwnTUxcH1cmOgjbJ!WV^luW{(nPZde}!WEv;afvr+TbGW!OZ>)o(Q-O~;M%nL9?EO1lWG9>;_q)lk-B&%YPC7 zAwGT^P`}qfs@Hs*n8vH9n{``u--pn1U4H#mv-1hFQA|9# zoed~HJFckLKlth(pqrsYPfy=a2u7e1OU&beVo=aPU&V<<0Y3x8AmHwIx!;oI-tZey z+9pVmWhm!DmpqB=`=nogYKl4<0bnsR1aTjLCP8iTSE9k$0Qa!L9_*+X+01emK#I^E zzGRQ68Wmml5%phOo5xb&1ve??uv9$bdv|v>NCy+2>*m-aDqbT1%V>Pr>}U( z@dG?W(p0bZTcXxlOh8u?80Wl6^||x-q$KFegmvDCgTM*UTZQcHjs&iAr!F;>Q6gSq1n#BL>{>aL z+#E3-&V-L;Wn|V_GeNy(#z+c48~raK$w1CsdgqPAp4?m&D4$_rL|YB%*M%XYFcU|5 z_0!v(c6(VKZCVoBs&Tk&3XdK^vo^<*P)fRtC)qK+Lq$mxB(Eo$*_)S_2c}tp`dz6D zfv=m8hV{Dil5~%IIzDVz7|!#hY{q2Tj0HW4pcZs9Z~!n_E(9 z3#B527&JVo^3Fg$&liJp0B5`8Ss z)`EOfwz*>MfFkXC~cGD$})A4_d?Gwx`I{{yx8>J(jg!Vsx}*tQ>tLl=JWw%qwG&O|Wbb zcrg)Yz-ux+&c~1bij?Pg zy<>437Z(?p7oXKAH|Ppi8W@?FfI}`VJqN-;8vGAuCy|W|zu9OLl#iBK!_pC38gesZ zrKE@LG_EyVuN%`qyCn1?Y>HU8w6d~t8;=e|BHO2rQL(H~NaL$7`FB~$lKAV>Db{<8 zXK=b5W=XEDub*w8iE~FJro4`<@H$*bXgy|pxG zsKL!Y!%?UFN?{Hf_EjEdrzhUf<|O9(iDO2{5TbCh^v`9xwDJbPl~Aa9P}Dk1C_$ve z@w@elauG1510^AjM6N1uh~>H>WM=k=<*pny2#3(F?%wLIUT*0r3e*V7{%dUdnLyIT4;$lbY^A-b-EdjK!C@P z=9~^Xc7|w1)_E%Be<_py5Vda!O!=JKs;sQ6s?1~&_1d92_jy*C0}X-V;RpE2V_+yP zJjODbBxx4Z`VXD*p9zug-w%(15}nG@(+xmm(_z1cE?QnT=N!T95IPqM8w%zw<9$Wb zzpniVN)a%HDYq52kY+makaOb%jO4An52R?5DvH1YATpmnlY6Crh`5|z=pZmrf4WkC z=pmv!1DFGJ$1i5RboJ?DxJKyAt5UqQHy4sF%>*n(a5&s$Wrg@#aza9*-MBF)XlMXX zvGvf!1@`SwsyAIAVz`m7o*!W6fIxuVK>!+JsMN~Z8ao>sklSEMD^*@0al`PI?eA9c zee=QL3q^z~PjYlUs6dQ+3 zS&E8=CcMXa|C!t+%r>Fdq8+$vhhdN$0oIx>4#zt1>)R!{6QcJ-uj$erW__T#MEuXM za`QhA{C)hGF8=7zBdN^ZRVTFWV_G3<;;=i%MDN1{Ar(MJ`ADfRED-k@^#j@kOy?oz zhC8k42n3!l9P8ZN-1i>l<}Arwgx&`JkXpeHXp*6a=nv%3uD^i=%lx@kISZ1`3?H}I z^XINxtxVclT7f}9*Vwe)tFnaCpr~C8RIgOg1Cu_FUc4ajYoyf;hW!@O47F_PHMT8_*D4cd({=g5n0VcawhNC^N;NH;xRhaC)1v1{*d zk-Q3e*k5c*6a-kiqxm)(vo-d$C@nS7wwVp2sZRhL^3)KH=Uns=6|z?%6#4J&&aKxJ z$298u|LNcG!zZPwMUK(<^I@_S&C}iGmzZ%-I5Qgs65Xul=L(oOIlAa?8ziG|2_w_s z9wBI`kuvmHV!w9WN=M{lW^DOovmzC;A;J|J7S>euQp_>ZtwxVy+;6au9q40JE7%X$ zE16c{m-If@@*5ToKK;kb${{?g> z2?@;OI~*MA!Az+eE<)rX4B*`M=c<6`o#7Da<{_dlE{>r_Yz%2akmP=^t(}6FjX;nF z&yAR-W%Zhwls;jPgWR?!B!3O(Bw}#OaS=r?7Q29RZ84LF3_xem)lC7TZ@S?EWlN}3 zraWU3Fubv;Q-~;uw;t_u19XIt3HlFlt~Ug3@85TY_#|*22nB+uc%I+d6eJCPUs16) z8;%NFzIW9p-U3bv*x_Kp+?Eb&aCi@qF$gKG|Ni}6*4fd~bAKiX`KPY3vJ&t?eZ9A_ zu_R;E>PYG0N@0DS{ru~pm1o78NM(^|1?BLe72ux?I}KVudAz(%!E}1E9!4by2Kn=jnyh)z> z8#6o>gCGe7MiT!{^YOV*e|iA{2X7el-YdHggl!@kks1J^zy`VhM;@*WlKw7{mtWnV zUh|L^6B9Ev&2BcjfS?HdR##UCialxxV(XEv4Wpx@HF|}rEZB&Tn#JPTeP9P*gQtKN zq7I+1CeGxFrbZybX4TZxOuLfp_$iAZ9|Lj0^0Kl9dOv8U0x6%0ijdJB@mn&ZpvMXc z3k$=0M3CTNfgCxwa!w!pL}~GE(^#EhEyEc*=lAkqoDKph1Ll|NRcU-&_B~bvK~0d& za;r@}7AqVIlGVqDTf!fPe&_=l4TKgv^9^p^( zhZ#~heqGyf1Nl#)HHanrD>Y@y3>CG=N03~enVN!{Mu>)G(bCcaGl=3q<}e%5CF4en zN+=#@?tcfZ#=kfcz!*ZXP1+MpR`nc*_l?AveffEL{pRITnHLbSr(3J z?Kh?y!$l53hWM2#aPkL|=Af@+N{1^yo8~qKcCVpvZG7Vnc#V0NSZMNuB6%0)=Ds#J zmseDv3!(gA_)LR-_m_hS+-;)9HR^D%O;IHBG@^aJ$Q#sOnUjrYn!37FOTS^{0l?S= z1Q_UFgRemU@2`S_baCo1EWJ=wymNJy|FmC4u~_pXvB>^Q51XI%RU-S-m}%WZ_SXiM|K!NQ`+m(F3)Ml#gn!ZP`F(;c&B^XuTnwtY6TacFE zcZltbmxi*$$QG!hAIc&`U0q!tKD=1t0KFH`m@zQQr`I9L<5YWgdgOBg2(HZlIasI< zNeGE$8Y(IfnZf@D7vI*53#!0El1<6TZ-}!`R67e&64`s<`ot5%vX5Ik!)^BJF)M?A z0JsYIiO!CW2J!p>nCNJ&9p%2!2^j>?Akn}4-QFwT$z_6sCrb$m-Ad2_}XbwWO zaEOV4p+LVr^$(TLmd^<$?j5lsTr^U-zGW8NPDNQ+aAjZC0kj5I9@6}yrzc&B8BCXm zb;%w|sHx8)ViY?6h_x zz>oqIT9H`@q=V5SD>4ct0Be~zabsj<2WKHynwFZ)d8!mt@wtTsC^k>e#rjND7DMy; zrluy-G*9w2RW-Hwxj7GzhygI3zYimqhw$~RnnkpNf;ZX2SU`v3>sAtYC=9N2KNl~r zQ=)I9LC?xgwqn}nu~p6lRuERDGC^Nh8!2sp(HcI!pvZbC%&>DVt12?P)3U_mWoG(~ zbH1j11(_HAZ$7JFkbu#ZF^731O&8(6l!iQnkRaH55b-Y^0nh`M*o;amG?TPy=TfC5 znFn-_-P{DCTie@Vr0M@}R2*&02}q{Zcx!C+UUV1UfcUT_Z+Od# z>Iqv%DVL`FozlfrUO3NhgsuOgs%V&tx7mZl@h)&yA!Mwoz z$D|Ken#MLn=`*i_qJLTBMQ0F2(S7sL@sW)j1GBa#*l!AD%2N3>)zf5{0s z`Xsta+&3OQe|{%LAzYHeN3`Rzv!}F{R-$YcJ`1;q2=zDTeJYvIG&rq*fI+3GPkAeD z$bADsD&pczpv2N|;b9rES60XEfCyO#nx!fpw% zK!&@f6F#~2X4x;H6D_^p8HJQ2lO_?2Gfe$^6bmIw>~R39u0YAw~iic(}+=LR)*RHHwMm6%`EIVTpnH(vX7XJBaPf zr3unEkJvp79~XMb89~sLz4xl8IwPq53pT#3s%u{b69cFXh62E-S__X^$04bLjUl%G zC<*BM%JOm#CIQCg_XKG{oT`bn1}o;1oZMVj{%?>++UUr%gXGix1)u-NKHZ-b)FMRx z=<9>%AlNDj*#vKVV`Q`XYpw1Pz7R-(&V=cjpm{kXBV#ILe<25&F}J<7MOT5ltLf$Cm41qJ!U3Sl9wFle z0>)2%fcjZV%-|F*R}?Yi)ksGWbVq0zqlx!%F`L&G%$3-?BMJTda?@eKkrS5( zx|Ftz4?z5fDW)f<5F^rJjXn3wsl%CIS+nBwptsqUi^S6uFZKr7s|4kTe+{e(X$&uV z{=)RHqrNEkpP>{G6UfN?dtpZFKk@Mw=Ip-bNQ(2&OM@kERF%YEusA@ji|588Ks`DA z)D(dS4>t8d1@1t>+h5pm%Tm5`{Q7T27vkx6&OP%K1!u_U=d{gkz74-6HlJB;3I?0l zPEZL~v_}tk%#cMJ{P6?h=mjvC>^>NH4ZMF1^pr*IY+u88RTe92YesKq_|TX$h|qR5 z>FMcUwutmQI66Xsm!gXR(f||*BCF;eY+8q=o!GvcWcDNGd5t#0>n#T0=c=t z9(uI@1n=aC2FT`uQ49$Z7=gV5(}rLORzZ*ln}B@S@-v)+b3`8zK2H714&-V90Ri7- zVslew*Aksv)h@t+5NU&$?t;aZTP^gY2+a^tA?`XV=Z0imh3u$fFpL@qb;aOczz@8= zhz)85%h#Xf>ovfW}?hwRj6atd_h72zqjNsXbm|eyV*d! zLK|@1t*ianUUj{teY5B>O&ETkF4vXYWW^o(W!vig3`-&p|lE#Z3z5bo(27=XF}|18_Z8X%q^ zfr%DyUI)66TN!OIvl&i#-yX(s@&^ukrD>p0M_J$SiDv@l@wb3AM+_=fe>tHlm?I!N zx+VqK+|B70WRGiKe}egQ$L)4n^f%<2?nU$gcnzN|hS&qd?T+{DV4ehXgcs z!PjlCM2I zFv|G^M2NnzHhbfq|=1 zB3kZ1r7?D*oX&G6N*R)LKA&zyd*s+B$iv2z%ZK$vj}m?_vtkhHt=1cG_zA35sKc>WjOP)kxJ4Cfkx z>QLrYH3(J-8EEo!GL$T*>ZpibLBuGG1{J29b!*|~`Dm)xN!N@m7KRV#>PMwgCGY9k z*@-?qOiM{&AQ-XyEJ_RO4f$`|?L*OW9oR1O0+d8BVaWI7<|^rJ#;7}F_z*=#>$}V( zEtnFk?WZ1|a0f*~sMtef%B1vh`-mmXvekfyd)JzdkKe?wjF%Os{48!L@Zbz44|763 zylXn2TX90oCMz&GvdpD|U-(w#&0g@>YTcP96MFbc!Ku;~e2D>aKjppI`TqHy&i_BB zNj=$l7gC9}UAl2^z9ap&-c9WB^O{vQwciFM{2GH4u)CL&l6i%X=J3LJzT>Y1?0-9> z?>4AxYhA6a*8npZ;Qzq2fJZ<;%8+3%vl+=MBBGa}q$D8&6XhAIEHsw202FcF4TtYS zkBn@e2eAN4?3Ls@u-JC;d>sbIvX>UO1os^7J(vhNnx^ogP~34_NXJ_4hYmy;CiQxk?cC+4XATJJ|fs zwUNg{rT!0ZxSavw1?La^fqfoTjK_Zyklpm<2awITa~{7H1Oy?y zt*7cPMFj_9FwPzWzA@lbK)i&fZV1LJ5x+5S6l#U~;^ie$Rg4Ms13zGcDPFXH$)QPS z#-@YPSVTg+ij3Ra?aWz&B-WG~;CUX%s63R0Pyffz0I{l_04rky{3ME~q? zXak03UV097G?X*zU!amX;_Gxq)(I4>FM80R(>%2gE)hT&gs;)hC@7kgs zqxi$xjXC4z2H;r^ggAK~a3zo%Nle7g3ew`hxTjd@J~P9A+QHS$Oom^pSE$4c*9xd& zW>Ey{Ffk?n%h}3aGZ>i#zys4g=R4%sCoy{UUbSPZUW+NtU`Hi&ig@gAfX>jJd|%?xGZ-KMI`!}a=fIM~c})7moM8pP zUu3JXvF>`!Hqo8ifAI`8ml059A?F0p6-J6Loj;ktklu^g_0?Z_3L0u^BAYW9oRr9t zzNAK-S18`f_YV<05a*x71Bz5ZL1_O|&IHJEtmlGgi5gE?hcS&`zkio$vcmH&&L^HV zl$55Kz{~}1D!=O=^v&`)ksA=EsrQ4#?9%HlDbFhRV6o$!`#d zUpt2lf3m=62SE*{7SYH6alrac5KTZ`&sCNEz=@53XZU2NdAY4m)tY+A>27ZB&zBthP5ssDEIS*ql)hR-xVbV9(35UhnV zYc%Kw4r5(tBPeeu_f9slJ$No=L9i zA;;MkWR~IQ=;{g!2rLgRiXGjG7DoN7v@u2>7lW=-ac>`4dY=cA0x}GEzQ_1XyXTNx zP7cx|0LdYSd9HMqjzAMiCk&f)-&+H>=WM?PmEHtY3;^%G1(Y-hscGry!AWo|Vb1|0 z4j~G1gI2+3P1Yh3G%~Jz=k#bDf`c%{%otT=h{my(z(KjjPkn@O0qcssB?m$@9BT+h z;nC%sz{o(lIu(oejprM}N3U72qA9WAi6`*v3AhS?If}wN(e3j;%*)?X|7sUs+Ps@U zT)fDPL*r|-;REYXJpq=@u}{k^_6L4_m?HqO#%8<{p2GluQd?UaWN zh&&`q`T4VF3@{e`)O!xLhZnHdkmmmi@1OR;4!Kgd1KCB;T3}RlD+qpZc}m}ie4~&p zn4(bPFRvv3fm7J)m_PY|0Cp`5^*L3qKhb#n80?SbrKMYPaG2uS8S1xOgsLYL6s-1J zwOM1~mLCgF|6!@g4=O>i&@JU}Kpc&q=!>E--q+i6YwqB8$HGILz~3Z9+uPg2<5)Z@ znORx=U2!h@Qrx(~0<{;WD?=Iq>i3)T?6b!#Y3O@48zAXPgEd(LKZ=Vm2jFzu}Y5|cqcq%|)VIf2uu;iYN!cf%kFt~0t zR%5)H@c4#vK-{I|cmWYDngM$N3c`EP+hzJ=K!(RR_lq)tbak=djJOId* zB4pkAKY#uV&xgQ?J>NB8*h1mSVgl+37CF)nFlr7w;mF#WsE;_~kEEkHIEvWrv!Q%B zQ~#Q+bUn#YVTEZE+edtk$26*>h=zH{wS7X*fCBE7uL`vxuDx8V;PL_qOzwdk2Lx#^ znizF!&eXd@>eTnqOxIIjd-Sui(JIK_xMkA>~lD#cIIL82uY$$nYO4?h*Oay!$xKq61FHMrAWqu zWGbCX6qTZob{P**;Sm`&DwS!Y47KBV@7BF{-Lsx`*IoDi)6&BJP2b=5Grit#EM5p! zs)2ewderN4PVwluy#c7UP(oh5d{VI)ArS*6B&uYxt&Pp8b)T7sUBRfqv&8;^z-&t+ z>(Tk|>3>b6X})EK1btH)WqvEmxKmX05vpgscmALNA^nD!EBxm7*^OjTQDZubNQmk2 z5AgR#&ZLJe-QX*da#XXB_J&R4;+&0)y&F3_$+L&3dU~*zf~8emnEP#V zEE_||v(mcMW_ylL+mX+E3?NN^9l0@rcKGlf6*91@4HKC8@>=%392jW3E!%qLp)`^~ zxRVHzc(8`wR0Ja5X{h2VGq_u7P`y)iJL%k31OZa+gO*@n zt8i@Y&|I`We?Gm)hI9t=u;HiC)-uPwa$VeV%MR{OX%rHBD{@!lm+XwK3g^zAMF4=K z1nDyN6=1gEp@5y}+6yeHLm+!W@=SZI+_oDnwz_S)`(n|R$9=_+<-S9r(4HT508au} zi;0Peio#|PY8gr_@+KG<8J7OaO*|P~D3F1U1^en$8cjpoU*`=Tj77cceFp?6gub)) z-RblN*an7ZCxBbz z*?|<_LV~E~=dyL__SbQ#3}W1~f{MNPXE>9!vtA!iiD;0^SlT2ID;~A+j5y_tNdn`Z zW?;Q;+lfQQdg9-FE(zwJcOBNNJeD@^b+VUA5J6m6h<|%USyVw&QVeY8_7tJB9oC~w zRy1#@t7E4AiJ}a{iq@~z&;%qWqX&9KU&iJ^9OZ0N(~i@oTRO@iHXi$8J+>vnFmF#$ zPJVu)c{w^C*Nd6q5G-5IHfDe#*3#;vY2dvM+h35JEQGg1TG|k4yN=G8!Qt6O?65d2 z<^|w%rp<-6VuECE{~G>azZJSRj(lp=&I2MNIA=Y=`GxiHV(V$oA;sW{V!u5f&E`qi zJScWSil`3DSTgfEcn|{s8#U2YJi9>$qqXc?gSQBAI!ChjM+tF!Y0;~yUshN+_`?hN zR7IGc;00;*oCWoa`;Va@>OAY~g+31InS)i~rH>!yO#}gAhF1`PA3SH$Wwe!shuu88 zE_V4E9s8&7zdP*4NeHL|M=IB%53@e=4KAuG&Y9KiZS5k?vA^f8=nWSBS=XNWW>Hv zL*Db7?oc7iQjbf2OFDOM5qML;K=mSP$ShVUsgX}W;5QQBAuse&z{r!g!QWBF=x8~( zA{vdOkXBcp1pbWPGz@&e;NwVshYp2~HaZzjj`t_FydiWGP0Yih#iMA$S**667m5xdLM zGNC^p3A4lKRK@+y&d5+}H+@qE70j?D7?rb-=z8K_;k^4+itWLC5-1teBlUB@eIyf= z5OC$w(aRqgxZqa+l;z9Zoae!Vm9r!Avf)^K&;dL0@nP%1zVl^%K9V)%+DA}Kn0J+O z6`Ns51S%YB+flOw(jTN*@U#O$sIIPVZ2TCZswmU+GQ~V~?c9B+Sy9x~E`436tQ>bp zR8*8R+l+gLPBa*==`V(Jz)Xw`3}8_ru^d?Q#SXL1jP(cpS+XDH8v5Ok|C*}gi~RYrFO;8(}j+D_0Y>+MU;6ZCGAi=tXltD>Oqu4$bzy)#a>gl?M4>7 z*+meH2v+ctsFHad2pzsBuHnC?NnX2WR`E zi|_0_fajf?gT5fvDcak2?4dG$kG?kA8xY2hFTZV0vtC*wVjdPYhjk7_Yfq73)ItzK z@xFcCNdC}72S{Y9qNT+_@9m2BQiPHfo7LH{3kq6P2tV#PvN>|D1X>8MDJ^4+E$C6= z$lHOg1Ay#UJQEvR*52J;$z{T1-U|btfCSY+g&cs!P?p@SKMf{6Tzvuxkh?=O`Wa>**4@apFi5XkIIzMb@BRzV8^$Q zfhCG#&|oD~Qd%k}E!|h{v&!_w)vIrjra;sDOl$y;8aA=Z(i9bMTru7rOjavBzdi~b zyHZ$)<&0_%rf5hB@LzmAy@o*N8@no7!!EHf|&Yam!d!0=UyCGXYOQ&W)SB;B<=d;?*nDCF;Tz?pm6G zGHFG(#0)bUrj|~sdlgbz+uKJvNbgXS5e`HvqPXJ5no5Fm=XoS0Z#w;!D~ zLKeKuo=h~_WZasMB94!bZ(*ix_4}y)L@9!YY#F&9=06V|FSv||Tm~QHtp!^Z?DuxI zwlFqCxma=i`u5W9*+n+qT^s>MFg9e2FVZtJySuuyb#>t?fel|8u`T0W%CKUeu95b(x z#w4I^qR5%!awURh~Z;^B7Yo>TcToh7}6ftK* zbpytWla^Ua%|d3(I%W^uXTun$3LW`HeLdvPQZ7vx zGI3lyr~blT^AOl4kX7co%-&uHHvg+!xo$cz4kPJqpC}Z3tOW|xs(a~lx}V=V1Mc4b z#iOznCQU|hH6@yXGtU34gTY6X{?%P7=nG;s;1T)M+NbP@?YZrnHFfpJL3w4-=&@tpi=s%9@+EEzo{UHv3twOxB)|-+qLu;eE1PXtVI(S^qu!Rw z-f%#%%k!R>w6|uSmiCxsJk^@x3Y=MciL32cMCQ%g;=ORp}6$al0>}34vE^vN-51&)k6{xI+Cp% zNtaizx;ZYTl9Hbifq!Eq4#?fOaib~HGOhWo2kWO(t{hU_@1x&8cIK3>8oj=D&ZW>r z*}Am5*2Dn14#Z1rm&k#Gf`X9c!ycw;H$@0cLQB!~n)OhB`uV|u@s@4|AYkOeShmg% zP~ilsp@2XoQO^06er~{#BjsgfFQhE{ZtN+lzSDQtBOx>6vCh-FMg3r7t2@g|ZE`lP zuEQ}gea0eAkG#ySt;6)B@m354LGwRSyggd?+SRMo+1$5m-EmO`r+HRY++8(4nCIrA z+*TYZnthE^W##2L1AxF?5fM>HYtCxm>UCLyw*fYCZ|& z<#liO;`Mv=|9gp9VVftSSI1D?vS&Wo5X1^E&ff@dcfYto8T5lzq6;!DWKFr&qv;+W z)}RNaLcVKxeHU3P2q$A4!Fx+OqKYQ|;31n(w$^9q$!f9!?UjN=}eBa@z=&!J(l{bxkX z1L|H_sV@H9F_qrTVzIyw9sBfj!h~Rb8d`LBpEP;>^wOyV>~kLBSADXteME%>Z)ltp zApFkG*k6&mVb}tV3tq#T$axIv(|+Fm8-wh<`u5U5xbe)vRlS54p}x5qN6p(y}eZo48ENb zG_H)Czx`VwJk;Ua`5J~g@HcM@OVF(*2?%&PcxPjkqa1wR(&GM2OPn82KT;SBj8KuF z&oEdW0Zrd%4n!RLFzS!gM+Yo!|WYJWPEt#W#wW z;gP>;SIqI1+DFeIn41b@HkjP9+w{8}XenFO#Q1plyYAk-8;KrCK86B6kF5&969)SF ze~FUcuPrJ5{h_0*h{#jhL??TDam3U?bFL>X+`ZE)UTb%IXTxl>ee@r(Ke`bL0Z1Yb s9y$3OjR^>&=8YxdtV_8l#3J>z#ngeUIfpF#tqQ_?oAuV)rnH!U0U@YkkpKVy literal 0 HcmV?d00001 -- GitLab From a726422e598acee3421b895a86ea31ea2035f350 Mon Sep 17 00:00:00 2001 From: Alexander Nedovizin Date: Tue, 20 Oct 2020 18:08:57 +0500 Subject: [PATCH 09/15] =?UTF-8?q?doc=20(neuro=5Felman):=20=D1=83=D0=B4?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=87=D0=B0=D1=81=D1=82?= =?UTF-8?q?=D0=B8=20=D0=BF=D1=83=D1=82=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nodes/logic/Description.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/nodes/logic/Description.md b/nodes/logic/Description.md index 1186f1d06..9582490a1 100644 --- a/nodes/logic/Description.md +++ b/nodes/logic/Description.md @@ -1,6 +1,6 @@ # Neuro Elman 1 Layer - +

Functionality

@@ -63,10 +63,10 @@ Logic -> Neuro Elman 1 Layer

Подготовка набора данных

- - + +
Аналогично подготовим ожидаемые данные
- +

Подготовка узла
    @@ -74,15 +74,15 @@ Logic -> Neuro Elman 1 Layer
  • B layer - поставим 5, но может быт любым (экспериментируйте)
  • C layer - задаём 1, т.к. на выходе должны получить результат в одно число
- +
Запускаем анимацию и ждём минуту. Затем выключаем анимацию. У меня получился такой результат:
- +

Давайте проверим результат обучения.
- +

-- GitLab From 04be1025f7f4417636ce36379822032bfce36715 Mon Sep 17 00:00:00 2001 From: Alexander Nedovizin Date: Fri, 23 Oct 2020 22:07:31 +0500 Subject: [PATCH 10/15] =?UTF-8?q?ref=20(neuro=5Felman):=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=20pep?= =?UTF-8?q?8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nodes/logic/neuro_elman.py | 112 +++++++++++++++++++------------------ 1 file changed, 59 insertions(+), 53 deletions(-) diff --git a/nodes/logic/neuro_elman.py b/nodes/logic/neuro_elman.py index d391b49c5..457414405 100644 --- a/nodes/logic/neuro_elman.py +++ b/nodes/logic/neuro_elman.py @@ -31,7 +31,7 @@ from copy import deepcopy from cmath import exp -class SvNeuro_Elman: +class SvNeuroElman: """ A set of functions for working with a neuron """ def init_w(self, number, ext, treshold): @@ -50,109 +50,115 @@ class SvNeuro_Elman: """ The function calculates the output values depending on the input """ _list_in = [signal_a/maxim for signal_a in list_in] - outA = self.layerA(_list_in, prop) - outB = self.layerB(outA, prop) - outC = self.layerC(outB, prop) + out_a = self.layer_a(_list_in, prop) + out_b = self.layer_b(out_a, prop) + out_c = self.layer_c(out_b, prop) if is_learning: len_etalon = len(etalon) if len_etalon < prop['InC']: d = prop['InC'] - len_etalon etalon = etalon + [0] * d - etalon_ = list(map(lambda x: x / maxim, etalon)) - self.learning(outA, outB, outC, etalon_, maxim, prop) + _etalon = list(map(lambda x: x / maxim, etalon)) + self.learning(out_a, out_b, out_c, _etalon, maxim, prop) - outC_ = list(map(lambda x: x * maxim, outC)) - return outC_ + _out_c = list(map(lambda x: x * maxim, out_c)) + return _out_c - def layerA(self, list_in, prop): - outA = deepcopy(list_in) - len_outa = len(outA) + def layer_a(self, list_in, prop): + out_a = deepcopy(list_in) + len_outa = len(out_a) if len_outa < prop['InA']: ext_list_in = prop['InA'] - len_outa - outA.extend([1] * ext_list_in) - return outA + out_a.extend([1] * ext_list_in) + return out_a - def layerB(self, outA, prop): - outB = [0] * prop['InB'] + def layer_b(self, outA, prop): + out_b = [0] * prop['InB'] for idx_a, weights_a in enumerate(prop['wA']): for idx_b, wa in enumerate(weights_a): signal_a = wa * outA[idx_a] - outB[idx_b] += signal_a + out_b[idx_b] += signal_a - outB_ = [self.sigmoida(signal_b) for signal_b in outB] - return outB_ + _out_b = [self.sigmoida(signal_b) for signal_b in out_b] + return _out_b - def layerC(self, outB, prop): - outC = [0] * prop['InC'] + def layer_c(self, outB, prop): + out_c = [0] * prop['InC'] for idx_b, weights_b in enumerate(prop['wB']): for idx_c, wb in enumerate(weights_b): signal_b = wb * outB[idx_b] - outC[idx_c] += signal_b - return outC + out_c[idx_c] += signal_b + return out_c # ********************** - def sigma(self, ej, f_vj): + @staticmethod + def sigma(ej, f_vj): return ej * f_vj - def f_vj_sigmoida(self, a, yj): + @staticmethod + def f_vj_sigmoida(a, yj): if a == 0: b = 1 else: b = 1 / a return b * yj * (1 - yj) - def func_ej_last(self, dj, yj): + @staticmethod + def func_ej_last(dj, yj): return dj - yj - def func_ej_inner(self, Esigmak, wkj): - return Esigmak * wkj + @staticmethod + def func_ej_inner(e_sigma_k, wkj): + return e_sigma_k * wkj - def delta_wji(self, sigmaj, yi, prop): - return prop['k_learning'] * sigmaj * yi + @staticmethod + def delta_wji(sigma_j, yi, prop): + return prop['k_learning'] * sigma_j * yi - def func_w(self, w, dw, prop): + @staticmethod + def func_w(w, dw, prop): return (1 - prop['k_lambda']) * w + dw - def learning(self, outA, outB, outC, etalon, maxim, prop): + def learning(self, out_a, out_b, out_c, etalon, maxim, prop): weights_a = deepcopy(prop['wA']) weights_b = deepcopy(prop['wB']) - outA_ = deepcopy(outA) - for idx, native_signal_a in enumerate(outA): + _out_a = deepcopy(out_a) + for idx, native_signal_a in enumerate(out_a): processed_signal_a = deepcopy(native_signal_a) - outB_ = deepcopy(outB) - outC_ = deepcopy(outC) - for step in range(prop['cycles']): + _out_b = deepcopy(out_b) + _out_c = deepcopy(out_c) + for _ in range(prop['cycles']): in_b = [0] * prop['InB'] in_a = [0] * prop['InA'] - for idc, signal_c in enumerate(outC_): + for idc, signal_c in enumerate(_out_c): c_ = self.sigmoida(signal_c) - eC = self.func_ej_last(etalon[idc], signal_c) - f_vC = self.f_vj_sigmoida(prop['InC'], c_) - sigmaC = self.sigma(eC, f_vC) + e_c = self.func_ej_last(etalon[idc], signal_c) + f_vc = self.f_vj_sigmoida(prop['InC'], c_) + sigma_c = self.sigma(e_c, f_vc) - for idb, signal_b in enumerate(outB_): - dwji = self.delta_wji(sigmaC, signal_b, prop) + for idb, signal_b in enumerate(_out_b): + dwji = self.delta_wji(sigma_c, signal_b, prop) weights_b[idb][idc] = self.func_w(weights_b[idb][idc], dwji, prop) - in_b[idb] += sigmaC * dwji + in_b[idb] += sigma_c * dwji - for idb, signal_b in enumerate(outB_): - f_vB = self.f_vj_sigmoida(prop['InB'], signal_b) - sigmaB = self.sigma(in_b[idb], f_vB) + for idb, signal_b in enumerate(_out_b): + f_vb = self.f_vj_sigmoida(prop['InB'], signal_b) + sigma_b = self.sigma(in_b[idb], f_vb) - for ida, signal_a in enumerate(outA): - dwji = self.delta_wji(sigmaB, signal_a, prop) + for ida, signal_a in enumerate(out_a): + dwji = self.delta_wji(sigma_b, signal_a, prop) weights_a[ida][idb] = self.func_w(weights_a[ida][idb], dwji, prop) - in_a[ida] += sigmaB * dwji + in_a[ida] += sigma_b * dwji processed_signal_a -= prop['epsilon'] * processed_signal_a * (maxim - processed_signal_a) absdx = abs(native_signal_a - processed_signal_a) if absdx <= prop['trashold'] or absdx > abs(maxim / 2): break - outA_[idx] = processed_signal_a + _out_a[idx] = processed_signal_a - outB_ = self.layerB(outA_, prop) - outC_ = self.layerC(outB, prop) + _out_b = self.layer_b(_out_a, prop) + _out_c = self.layer_c(out_b, prop) prop['wA'] = weights_a prop['wB'] = weights_b @@ -226,7 +232,7 @@ class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) handle = handle_read(handle_name) props = handle[1] if not handle[0]: - elman = SvNeuro_Elman() + elman = SvNeuroElman() props = {'InA': 2, 'InB': 5, 'InC': 1, -- GitLab From 7047f6ed2f25c2d498dd62540542f5693e4ee078 Mon Sep 17 00:00:00 2001 From: nortikin Date: Fri, 18 Dec 2020 09:56:51 +0300 Subject: [PATCH 11/15] docs elman placed right --- {nodes => docs/assets/nodes}/logic/neuro.png | Bin .../assets/nodes}/logic/neuro_ansumble.png | Bin .../assets/nodes}/logic/neuro_data_in.png | Bin .../assets/nodes}/logic/neuro_data_in_text.png | Bin .../assets/nodes}/logic/neuro_etalon.png | Bin .../assets/nodes}/logic/neuro_result.png | Bin .../assets/nodes}/logic/neuro_training_result.png | Bin .../nodes/logic/neuro_elman.md | 14 +++++++------- 8 files changed, 7 insertions(+), 7 deletions(-) rename {nodes => docs/assets/nodes}/logic/neuro.png (100%) rename {nodes => docs/assets/nodes}/logic/neuro_ansumble.png (100%) rename {nodes => docs/assets/nodes}/logic/neuro_data_in.png (100%) rename {nodes => docs/assets/nodes}/logic/neuro_data_in_text.png (100%) rename {nodes => docs/assets/nodes}/logic/neuro_etalon.png (100%) rename {nodes => docs/assets/nodes}/logic/neuro_result.png (100%) rename {nodes => docs/assets/nodes}/logic/neuro_training_result.png (100%) rename nodes/logic/Description.md => docs/nodes/logic/neuro_elman.md (92%) diff --git a/nodes/logic/neuro.png b/docs/assets/nodes/logic/neuro.png similarity index 100% rename from nodes/logic/neuro.png rename to docs/assets/nodes/logic/neuro.png diff --git a/nodes/logic/neuro_ansumble.png b/docs/assets/nodes/logic/neuro_ansumble.png similarity index 100% rename from nodes/logic/neuro_ansumble.png rename to docs/assets/nodes/logic/neuro_ansumble.png diff --git a/nodes/logic/neuro_data_in.png b/docs/assets/nodes/logic/neuro_data_in.png similarity index 100% rename from nodes/logic/neuro_data_in.png rename to docs/assets/nodes/logic/neuro_data_in.png diff --git a/nodes/logic/neuro_data_in_text.png b/docs/assets/nodes/logic/neuro_data_in_text.png similarity index 100% rename from nodes/logic/neuro_data_in_text.png rename to docs/assets/nodes/logic/neuro_data_in_text.png diff --git a/nodes/logic/neuro_etalon.png b/docs/assets/nodes/logic/neuro_etalon.png similarity index 100% rename from nodes/logic/neuro_etalon.png rename to docs/assets/nodes/logic/neuro_etalon.png diff --git a/nodes/logic/neuro_result.png b/docs/assets/nodes/logic/neuro_result.png similarity index 100% rename from nodes/logic/neuro_result.png rename to docs/assets/nodes/logic/neuro_result.png diff --git a/nodes/logic/neuro_training_result.png b/docs/assets/nodes/logic/neuro_training_result.png similarity index 100% rename from nodes/logic/neuro_training_result.png rename to docs/assets/nodes/logic/neuro_training_result.png diff --git a/nodes/logic/Description.md b/docs/nodes/logic/neuro_elman.md similarity index 92% rename from nodes/logic/Description.md rename to docs/nodes/logic/neuro_elman.md index 9582490a1..396a26426 100644 --- a/nodes/logic/Description.md +++ b/docs/nodes/logic/neuro_elman.md @@ -1,6 +1,6 @@ # Neuro Elman 1 Layer - +

Functionality

@@ -63,10 +63,10 @@ Logic -> Neuro Elman 1 Layer

Подготовка набора данных

- - + +
Аналогично подготовим ожидаемые данные
- +

Подготовка узла
    @@ -74,15 +74,15 @@ Logic -> Neuro Elman 1 Layer
  • B layer - поставим 5, но может быт любым (экспериментируйте)
  • C layer - задаём 1, т.к. на выходе должны получить результат в одно число
- +
Запускаем анимацию и ждём минуту. Затем выключаем анимацию. У меня получился такой результат:
- +

Давайте проверим результат обучения.
- +

-- GitLab From 9f16c5bc28ad81acd9041f7cc4cbae700a2e7970 Mon Sep 17 00:00:00 2001 From: nortikin Date: Mon, 21 Dec 2020 19:28:22 +0300 Subject: [PATCH 12/15] docs --- docs/nodes/logic/{neuro_elman.rst => neuro_elman_old.rst} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/nodes/logic/{neuro_elman.rst => neuro_elman_old.rst} (100%) diff --git a/docs/nodes/logic/neuro_elman.rst b/docs/nodes/logic/neuro_elman_old.rst similarity index 100% rename from docs/nodes/logic/neuro_elman.rst rename to docs/nodes/logic/neuro_elman_old.rst -- GitLab From 3b5ab91350f2e4642313bf4effd5092c4d3ee8e9 Mon Sep 17 00:00:00 2001 From: nortikin Date: Mon, 21 Dec 2020 19:49:06 +0300 Subject: [PATCH 13/15] dosc english --- docs/nodes/logic/neuro_elman.md | 69 ++++++++++++----------- docs/nodes/logic/neuro_elman_ru.md | 88 ++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+), 35 deletions(-) create mode 100644 docs/nodes/logic/neuro_elman_ru.md diff --git a/docs/nodes/logic/neuro_elman.md b/docs/nodes/logic/neuro_elman.md index 396a26426..2b7bc9f61 100644 --- a/docs/nodes/logic/neuro_elman.md +++ b/docs/nodes/logic/neuro_elman.md @@ -4,23 +4,22 @@

Functionality

-Однослойная нейронная сеть с обучением. На вход подаются входные данные и ожидаемые выходные. -Необходимо сеть обучить на наборе данных. После обучения можно использовать этот узел для вычислений по новому набору. +Layer 1 neuron network with studying. With Inputs and Outputs. +You should study network on data. After studying use node on your tree.

-
Описание алгоритма -

Перед использованием узел нужно настроить. Сначала настраиваются обязаельные параметры. Дополнительные парметры можно не трогать без необходимости. -После настройки узла и поключения связей можно приступать к обчению. -Узел обучается при каждом обновлении. Обновить можно с помощью кнопки или запустить анимацию. -Последний вариант удобен тем, что можно просто ждать пока узел обучится, и затем остановить анимацию. +Algorythm description +

Tune node before use. Mandatory props first. Additional props can be passed. +After tuning and connecting links go to study. +Every update will teach your node. +You can press update and wait some time.

-Формат данных:
+Data shape:
[obj1, obj2, obj3, ...]
obj = [...]
[[...], [...], [...], ...]
-т.е. уровень списка объектов. Каждый объект содержит список значений для одной порции обучения. -Т.о. предварительно подготовить данные и запаковать их в объекты, а затем подать на вход. На вход etalon нужно подать -такое же количество объектов, чтобы обучать сеть. На выходе получим такое же количество объектов с результатом работы сети. +Object levels 2 levels. Every object contain data for one step of srudying. +Prepare data that way and link to input. To etalon send same objects count. Output will contain same objects count.

Category

@@ -28,60 +27,60 @@ Logic -> Neuro Elman 1 Layer

Inputs

    -
  • data - входящий набор данных
  • -
  • etalon - ожидаемый набор данных
  • +
  • data - input data
  • +
  • etalon - expected data

Outputs

    -
  • result - результат преобразований
  • +
  • result - resulting data

Parameters

    -
  • A layer - количество нейронов первого слоя, равно количеству входных данных в объекте
  • -
  • B layer - количество нейронов второго слоя, это внутренний слой
  • -
  • C layer - количество нейронов третьего слоя, равно количеству значений в объекте на выходе
  • -
  • maximum - максимальные возможные значения, которые предполагается использовать на узле
  • -
  • koeff learning - темп обучения узла (не страшно менять)
  • -
  • gisterezis - запланирован для установки пороговых значений при обработке сигналов (пока не используется)
  • -
  • cycles - количество циклов обучения узла за один прогон
  • -
  • epsilon - восприимчивость обучаения узла
  • -
  • lambda - шаг изменения весовых коэффиуциентов
  • -
  • treshold - порог, предотвращающий переобучение
  • -
  • Reset (button) - сброс всех весовых коэффициентов
  • +
  • A layer - First layer neurons count, same as object count
  • +
  • B layer - Second layer neurons count, inner layer
  • +
  • C layer - Third layer neurons count, Equal to objects count on output
  • +
  • maximum - Maximum possible values, meaning to be used on node
  • +
  • koeff learning - node learning tempo (change w/o fear)
  • +
  • gisterezis - scheduled to set thresholds for signal processing (not in use yet)
  • +
  • cycles - Loops count to study by one pass
  • +
  • epsilon - the susceptibility of the node study
  • +
  • lambda - weight coefficients changing's step
  • +
  • treshold - Threshold preserve retraining
  • +
  • Reset (button) - reset all coeffitients

Usage

-Постановка задачи +Task statement

-Необходимо обучить сеть операции XOR:
+Please, study for XOR operation:
[1, 1] = [1]
[1, 0] = [1]
[0, 1] = [1]
[0, 0] = [0]

-Подготовка набора данных +Preparations

-
Аналогично подготовим ожидаемые данные
+
Same with expected data

-Подготовка узла +Node preparations
    -
  • A layer - задаём значение 2, т.к. на вход подаются значения парами
  • -
  • B layer - поставим 5, но может быт любым (экспериментируйте)
  • -
  • C layer - задаём 1, т.к. на выходе должны получить результат в одно число
  • +
  • A layer - Set value 2, because inputs are pairs
  • +
  • B layer - Let it be 5, but can be any (experiment here)
  • +
  • C layer - Setting 1, because output have to be one number

-Запускаем анимацию и ждём минуту. Затем выключаем анимацию. У меня получился такой результат: +Running learning and waiting. Interrupt Studying. I had have that result:

-Давайте проверим результат обучения.
+Compare result:

diff --git a/docs/nodes/logic/neuro_elman_ru.md b/docs/nodes/logic/neuro_elman_ru.md new file mode 100644 index 000000000..396a26426 --- /dev/null +++ b/docs/nodes/logic/neuro_elman_ru.md @@ -0,0 +1,88 @@ +# Neuro Elman 1 Layer + + + +

Functionality

+

+Однослойная нейронная сеть с обучением. На вход подаются входные данные и ожидаемые выходные. +Необходимо сеть обучить на наборе данных. После обучения можно использовать этот узел для вычислений по новому набору. +

+Описание алгоритма +

Перед использованием узел нужно настроить. Сначала настраиваются обязаельные параметры. Дополнительные парметры можно не трогать без необходимости. +После настройки узла и поключения связей можно приступать к обчению. +Узел обучается при каждом обновлении. Обновить можно с помощью кнопки или запустить анимацию. +Последний вариант удобен тем, что можно просто ждать пока узел обучится, и затем остановить анимацию. +

+

+Формат данных:
+[obj1, obj2, obj3, ...]
+obj = [...]
+[[...], [...], [...], ...]
+т.е. уровень списка объектов. Каждый объект содержит список значений для одной порции обучения. +Т.о. предварительно подготовить данные и запаковать их в объекты, а затем подать на вход. На вход etalon нужно подать +такое же количество объектов, чтобы обучать сеть. На выходе получим такое же количество объектов с результатом работы сети. +

+ +

Category

+Logic -> Neuro Elman 1 Layer + +

Inputs

+
    +
  • data - входящий набор данных
  • +
  • etalon - ожидаемый набор данных
  • +
+ +

Outputs

+
    +
  • result - результат преобразований
  • +
+ +

Parameters

+
    +
  • A layer - количество нейронов первого слоя, равно количеству входных данных в объекте
  • +
  • B layer - количество нейронов второго слоя, это внутренний слой
  • +
  • C layer - количество нейронов третьего слоя, равно количеству значений в объекте на выходе
  • +
  • maximum - максимальные возможные значения, которые предполагается использовать на узле
  • +
  • koeff learning - темп обучения узла (не страшно менять)
  • +
  • gisterezis - запланирован для установки пороговых значений при обработке сигналов (пока не используется)
  • +
  • cycles - количество циклов обучения узла за один прогон
  • +
  • epsilon - восприимчивость обучаения узла
  • +
  • lambda - шаг изменения весовых коэффиуциентов
  • +
  • treshold - порог, предотвращающий переобучение
  • +
  • Reset (button) - сброс всех весовых коэффициентов
  • +
+ +

Usage

+Постановка задачи +

+Необходимо обучить сеть операции XOR:
+[1, 1] = [1]
+[1, 0] = [1]
+[0, 1] = [1]
+[0, 0] = [0]
+

+Подготовка набора данных +

+ + +
Аналогично подготовим ожидаемые данные
+ +

+Подготовка узла +
    +
  • A layer - задаём значение 2, т.к. на вход подаются значения парами
  • +
  • B layer - поставим 5, но может быт любым (экспериментируйте)
  • +
  • C layer - задаём 1, т.к. на выходе должны получить результат в одно число
  • +
+ +
+Запускаем анимацию и ждём минуту. Затем выключаем анимацию. У меня получился такой результат: +
+ + +

+Давайте проверим результат обучения.
+ +
+

+ -- GitLab From cc8a644c1c19e4f3bac254a1922df7a1d3a3b543 Mon Sep 17 00:00:00 2001 From: nortikin Date: Sun, 27 Dec 2020 22:53:10 +0300 Subject: [PATCH 14/15] docs rst --- docs/nodes/logic/neuro_elman.md | 87 ------------------ docs/nodes/logic/neuro_elman.rst | 128 +++++++++++++++++++++++++++ docs/nodes/logic/neuro_elman_old.rst | 18 ---- 3 files changed, 128 insertions(+), 105 deletions(-) delete mode 100644 docs/nodes/logic/neuro_elman.md create mode 100644 docs/nodes/logic/neuro_elman.rst delete mode 100644 docs/nodes/logic/neuro_elman_old.rst diff --git a/docs/nodes/logic/neuro_elman.md b/docs/nodes/logic/neuro_elman.md deleted file mode 100644 index 2b7bc9f61..000000000 --- a/docs/nodes/logic/neuro_elman.md +++ /dev/null @@ -1,87 +0,0 @@ -# Neuro Elman 1 Layer - - - -

Functionality

-

-Layer 1 neuron network with studying. With Inputs and Outputs. -You should study network on data. After studying use node on your tree. -

-Algorythm description -

Tune node before use. Mandatory props first. Additional props can be passed. -After tuning and connecting links go to study. -Every update will teach your node. -You can press update and wait some time. -

-

-Data shape:
-[obj1, obj2, obj3, ...]
-obj = [...]
-[[...], [...], [...], ...]
-Object levels 2 levels. Every object contain data for one step of srudying. -Prepare data that way and link to input. To etalon send same objects count. Output will contain same objects count. -

- -

Category

-Logic -> Neuro Elman 1 Layer - -

Inputs

-
    -
  • data - input data
  • -
  • etalon - expected data
  • -
- -

Outputs

-
    -
  • result - resulting data
  • -
- -

Parameters

-
    -
  • A layer - First layer neurons count, same as object count
  • -
  • B layer - Second layer neurons count, inner layer
  • -
  • C layer - Third layer neurons count, Equal to objects count on output
  • -
  • maximum - Maximum possible values, meaning to be used on node
  • -
  • koeff learning - node learning tempo (change w/o fear)
  • -
  • gisterezis - scheduled to set thresholds for signal processing (not in use yet)
  • -
  • cycles - Loops count to study by one pass
  • -
  • epsilon - the susceptibility of the node study
  • -
  • lambda - weight coefficients changing's step
  • -
  • treshold - Threshold preserve retraining
  • -
  • Reset (button) - reset all coeffitients
  • -
- -

Usage

-Task statement -

-Please, study for XOR operation:
-[1, 1] = [1]
-[1, 0] = [1]
-[0, 1] = [1]
-[0, 0] = [0]
-

-Preparations -

- - -
Same with expected data
- -

-Node preparations -
    -
  • A layer - Set value 2, because inputs are pairs
  • -
  • B layer - Let it be 5, but can be any (experiment here)
  • -
  • C layer - Setting 1, because output have to be one number
  • -
- -
-Running learning and waiting. Interrupt Studying. I had have that result: -
- - -

-Compare result:
- -
-

- diff --git a/docs/nodes/logic/neuro_elman.rst b/docs/nodes/logic/neuro_elman.rst new file mode 100644 index 000000000..9266b5895 --- /dev/null +++ b/docs/nodes/logic/neuro_elman.rst @@ -0,0 +1,128 @@ +Neuro Elman 1 Layer +=================== + +.. image:: ../../assets/nodes/logic/neuro.png + +.. _`Russian translation here`: ./neuro_elman_ru.md + +Functionality +------------- + + +Layer 1 neuron network with studying. With Inputs and Outputs. +You should study network on data. After studying use node on your tree. + +.. _`Algorythm description`: https://kpfu.ru/staff_files/F1493580427/NejronGafGal.pdf + + +Tune node before use. Mandatory props first. Additional props can be passed. +After tuning and connecting links go to study. +Every update will teach your node. +You can press update and wait some time. + + +Data shape: +----------- + +:: + + [obj1, obj2, obj3, ...] + obj = [...] + [[...], [...], [...], ...] + +Object levels 2 levels. Every object contain data for one step of srudying. +Prepare data that way and link to input. To etalon send same objects count. Output will contain same objects count. + + +Category +-------- + +Logic -> Neuro Elman 1 Layer + +Inputs +------ + +* **data** - input data +* **etalon** - expected data + + +Outputs +------- + +* **result** - resulting data + + +Parameters +---------- + ++--------------------+--------+--------------------------------------------------------------------------------+ +| Parameters | Type | Description | ++====================+========+================================================================================+ +| **A layer** | int | First layer neurons count, same as object count | ++--------------------+--------+--------------------------------------------------------------------------------+ +| **B layer** | int | Second layer neurons count, inner layer | ++--------------------+--------+--------------------------------------------------------------------------------+ +| **C layer** | int | Third layer neurons count, Equal to objects count on output | ++--------------------+--------+--------------------------------------------------------------------------------+ +| **maximum** | float | Maximum possible values, meaning to be used on node | ++--------------------+--------+--------------------------------------------------------------------------------+ +| **koeff learning** | float | node learning tempo (change w/o fear) | ++--------------------+--------+--------------------------------------------------------------------------------+ +| **gisterezis** | float | scheduled to set thresholds for signal processing (not in use yet) | ++--------------------+--------+--------------------------------------------------------------------------------+ +| **cycles** | int | Loops count to study by one pass | ++--------------------+--------+--------------------------------------------------------------------------------+ +| **epsilon** | float | the susceptibility of the node study | ++--------------------+--------+--------------------------------------------------------------------------------+ +| **lambda** | float | weight coefficients changing's step | ++--------------------+--------+--------------------------------------------------------------------------------+ +| **treshold** | float | Threshold preserve retraining | ++--------------------+--------+--------------------------------------------------------------------------------+ +| **Reset** | Button | reset all coeffitients | ++--------------------+--------+--------------------------------------------------------------------------------+ + + +Usage +----- + +**Task statement** +~~~~~~~~~~~~~~~~~~ + +Please, study for XOR operation: + +:: + + [1, 1] = [1] + [1, 0] = [1] + [0, 1] = [1] + [0, 0] = [0] + +**Preparations** +~~~~~~~~~~~~~~~~ + +.. image:: ../../assets/nodes/logic/neuro_data_in.png +.. image:: ../../assets/nodes/logic/neuro_data_in_text.png + +Same with expected data: +"""""""""""""""""""""""" + +.. image:: ../../assets/nodes/logic/neuro_etalon.png + +**Node preparations** +~~~~~~~~~~~~~~~~~~~~~ + +* **A layer** - Set value 2, because inputs are pairs +* **B layer** - Let it be 5, but can be any (experiment here) +* **C layer** - Setting 1, because output have to be one number + +.. image:: ../../assets/nodes/logic/neuro_ansumble.png + +Running learning and waiting. Interrupt Studying. I had have that result: +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +.. image:: ../../assets/nodes/logic/neuro_training_result.png + +Compare result: +""""""""""""""" + +.. image:: ../../assets/nodes/logic/neuro_result.png diff --git a/docs/nodes/logic/neuro_elman_old.rst b/docs/nodes/logic/neuro_elman_old.rst deleted file mode 100644 index d5c2c8575..000000000 --- a/docs/nodes/logic/neuro_elman_old.rst +++ /dev/null @@ -1,18 +0,0 @@ -Elman neuro node layer 1 -======================== - - Neuro network node - This node teachable. You may teach him rules, that he understand himself. Just put data and correct answer. When displace answer, he will find right answer himself. - Input data. Inserting many objects - output many objects. Inserting one object with many parameters - output one object. - Always insert constant numbers count of parameters, otherwise it will reset neuro data and start every time from beginning. Keep constant numbers count. - -- coef_learning - learning speed coeffitient, accuracy influence (less - more accuracy); -- gisterezis - spread of input and etalon data; -- maximum - maximum number input (better define little overhang number); -- cycles - passes on one object; -- A layer - input layer cores (and it is number of objects); -- B layer - inner layer cores - more - smarter (overlearning is bad too); -- C layer - output layer cores - numbers quantity in output; -- epsilon - inner variable - argument offset in passes 'cycles' (not much influence totally); -- lambda - holding coefficient, to preserve data flooding; -- threshold - inner variable - defines reasonability limit in passes 'cycles' (not much influence totally). -- GitLab From 710f80f37066022aaaf7584d5cef9ca677cb49e6 Mon Sep 17 00:00:00 2001 From: nortikin Date: Sun, 27 Dec 2020 23:00:28 +0300 Subject: [PATCH 15/15] some words --- nodes/logic/neuro_elman.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/nodes/logic/neuro_elman.py b/nodes/logic/neuro_elman.py index 457414405..6f9291bbd 100644 --- a/nodes/logic/neuro_elman.py +++ b/nodes/logic/neuro_elman.py @@ -32,7 +32,7 @@ from cmath import exp class SvNeuroElman: - """ A set of functions for working with a neuron """ + """ A set of functions for working with teachable neuron """ def init_w(self, number, ext, treshold): out = [] @@ -165,7 +165,12 @@ class SvNeuroElman: class SvNeuroElman1LNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): - ''' Neuro Elman 1 Layer ''' + ''' + Neuro Elman 1 Layer + Teachable node getting data with etalon example to learn + Than after animated learning can output result without + etalon values + ''' bl_idname = 'SvNeuroElman1LNode' bl_label = '*Neuro Elman 1 Layer' -- GitLab