改变不可见内子的输入

2024-09-30 18:22:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在Python上创建一个neiron网络。我已经做了两个类:Neiron(它是隐形Neiron的类似物)和InputNeiron。输入Neiron工作正常,但Neiron不工作。 问题是,在Operate()之后,这个Neiron的输入发生了变化。我怎样才能修好它?它是由什么引起的(我是编程新手,不是以英语为母语的人:D) 代码如下:

  import random
import math

class Neiron():
 Input = 0
 TargetNeiron = {}
 def Func(self, x):
  return (1/(1+ math.exp(-1*x)))
 def __init__(self, *neirons):
  for neiron in neirons:
   self.TargetNeiron[neiron] = random.triangular(0,100)
 def Operate(self):
  a = self.Func(self.Input)
  print(a)
  for neiron in self.TargetNeiron:
   neiron.Input = neiron.Input + (self.TargetNeiron[neiron] * a)


class InputNeiron(Neiron):
 def Func(self, x):
  if str(type(x)) == "<class 'str'>":
   return 1;
  else:
   if x < 1:
    return x;
   else:
    return 1/x;


b = Neiron()
a = Neiron(b);
c = InputNeiron(b,a)

try:
 c.Input = float(input('Input = '))
except:
 c.Input = 1;

print('target Neirons of c, first b, second a:',c.TargetNeiron)
print('Input of a before c.Operate:', a.Input)
print('Input of b before c.Operate:', b.Input)
c.Operate()
print('Input of a after c.Operate:', a.Input)
print('Input of b after c.Operate:', b.Input)
a.Operate()
print('Input of a after a.Operate:', a.Input)
print('Input of b after a.Operate:', b.Input)

Neiron(a)或InputNeiron(a)表示该Neiron将连接到a。 TargetNeirons是一本包含{neiron:synaptic multiplier}paars的字典。Func是一个特殊函数。她对Neiron和InputNeiron是不同的


Tags: ofimportselfinputreturndefclassfunc
1条回答
网友
1楼 · 发布于 2024-09-30 18:22:31

在每次调用n.Operate()之后,NeironInput字段发生变化的原因是这种代码的平静,它改变了它

for neiron in self.TargetNeiron:
  neiron.Input = neiron.Input + (self.TargetNeiron[neiron] * a)

至于“我如何修复它?”我想如果您只想保持c的输入不变,您可以覆盖InputNeiron类的Operate函数,否则您必须更改Neiron类中的函数Operate以保持neiron.Input不变

一般来说,我强烈建议您查看人工神经网络的现有实现,例如scikit learn

希望这有帮助

相关问题 更多 >