我有一个代码,该代码手动实现Perceptron。不幸的是,我收到一个错误,我不知道该如何解决... 我搜索后发现,使用方法但未调用该方法时,通常会发生此错误,但是在这一点上,我不知道我应该在错误行中调用的任何方法。
我的代码在这里:
import random
class Perceptron:
def __init__(self, amostras, saidas, taxa_aprendizado = 0.1, epocas = 1000, limiar = -1):
self.amostras = amostras
self.saidas = saidas
self.taxa_aprendizado = taxa_aprendizado
self.epocas = epocas
self.limiar = limiar
self.n_amostras = len(amostras)
self.n_atributos = len(amostras[0])
self.pesos = []
def treinar(self):
for amostra in self.amostras:
amostra.insert(0, -1)
for i in range(self.n_atributos):
self.pesos.append(random.random)
self.pesos.insert(0, self.limiar)
n_epocas = 0
while True:
erro = False
for i in range(self.n_amostras):
uzin = 0
for j in range(self.n_atributos + 1):
uzin += (self.pesos[j])*(self.amostras[i][j])
y = self.degrau(uzin)
if y != saidas[i]:
erro_aux = self.saidas[i] - y
for j in range(self.n_atributos + 1):
uzin += self.pesos[j] + (self.taxa_aprendizado) * (erro_aux) * (self.amostras[i][j])
erro = True
n_epocas +=1
if not erro or n_epocas > self.epocas:
break
print(self.pesos)
def degrau(self, u):
if u >=0:
return 1
else:
return 0
entradas = [[0,0], [0,1], [1,0], [1,1]]
saidas = [0,1,1,1]
rede = Perceptron(entradas, saidas)
rede.treinar()
print(rede.amostras)
回溯(最近通话最近):文件 “ C:/用户/尼克/PycharmProjects/CursoMachineLearning/redes_neurais/perceptronzin.py”, 第58行,在 rede.treinar()文件“ C:/Users/nick/PycharmProjects/CursoMachineLearning/redes_neurais/perceptronzin.py”, 海港31号线 uzin + =(self.pesos [j])*(self.amostras [i] [j])TypeError:*:不支持的操作数类型:“ builtin_function_or_method”和 'int'
答案 0 :(得分:0)
在第19行中,您创建了函数对象而不是 floats 的列表。
使用:
self.pesos.append(random.random())
代替
self.pesos.append(random.random)