我实际上是一名学生,我的老师给了我这段代码以理解和使用该代码,以便我可以继续学习机器学习等。我得到这是一个AND函数,并且得到了它正在打印的东西,我def 调用(self,in_data):函数不能理解,“ in_data”从何处获取其值?因为从我的观点来看,我看到的是一个空白变量,以某种方式可以帮助我完成代码。另外,更改init部分中权重的值实际上并没有更改此代码中的任何内容,我想知道为什么。这是我要学习的全部代码。感谢您的帮助!
import numpy as np
class Perceptron:
def __init__(self,input_length,weights=None):
if weights is None:
self.weights= np.ones(input_length)*0.5
else:
self.weights=weights
@staticmethod
def unit_step_function(x):
if x>0.5:
return 1
return 0
def __call__(self,in_data):
weighted_input=self.weights*in_data
weighted_sum=weighted_input.sum()
return Perceptron.unit_step_function(weighted_sum)
p = Perceptron(2,np.array([0.5,0.5]))
for x in [np.array([0,0]),np.array([0,1]),np.array([1,0]),np.array([1,1])]:
y=p(np.array(x))
print(x,y)
答案 0 :(得分:0)
__call__
。您可以在底部看到完成的操作。 p
是一个Perceptron对象,但在您编写时被视为函数
y = p(np.array(x))
那么数据从哪里来?就是传入的np.array(x)
。
您可以详细了解“ dunder” /“ magic”方法here。
我实际上认为这是对__call__
的滥用。我不会认为Perceptron具有内在的功能性。我认为使用常规方法会更清晰:
class Perceptron:
. . .
def give_input(self, in_data): # Instead of __call__
weighted_input = self.weights*in_data
weighted_sum = weighted_input.sum()
return Perceptron.unit_step_function(weighted_sum)
for x in [np.array([0,0]),np.array([0,1]),np.array([1,0]),np.array([1,1])]:
y = p.give_input(np.array(x)) # Just a typical method call now