我无法使用列表初始化课程
这是一个梯度下降问题,我想创建一个带有列表(权重)的对象。
我尝试使用weights = None并将类型从数组更改为列表,但是无论如何,我一直在获取“ numpy.ndarray对象不可调用”的信息。
估计中的数组y已经定义,我刚刚从这里排除了它。
class Point(object):
def __init__ (self, weights = None):
self.weights = weights
self.estimate = self.estimate()
self.loss = self.loss()
self.cost = self.cost()
self.gradient = self.gradient()
def estimate(self):
estimate = np.dot(y, self.weights)
return estimate
def loss(self):
loss = (self.estimate - target)
return loss
def cost(self):
cost = np.sum(self.loss **2)
def gradient(self):
gradient = np.dot(yTrans, self.loss)
return gradient
def gradient_descent(self):
alpha = 0.0001
self.weights = self.weights - alpha * self.gradient
return weights
w = [10, 14, 15, 10, 5]
k = Point(w)
k.weights()
我希望k.gradient()
返回一个权重数组,但我什至无法初始化该类
答案 0 :(得分:0)
您的__init__
不能按照您想要的方式工作,因为您在__init__
方法中使用了关键字参数而不是位置参数,所以应该像def __init__(self, weights)
而不是{{ 1}}
这个解决方案如何?
def __init__(self, weights=None)
此外,您可以将列表定义为这样的变量:
point = Point(weights=[10, 14, 15, 10, 5])
print(point.weights)
另一种解决方案,如果您将weights=[10, 14, 15, 10, 5]
point = Point(weights=weights)
print(point.weights)
更改为__init__
,则可以用新的方式创建实例,因为现在def __init__(self, weights)
中的参数将定位而不是关键字:
__init__
答案 1 :(得分:-1)
您正在尝试将数组作为函数调用。您需要按以下方式尝试
w = [10, 14, 15, 10, 5]
k = Point(w)
print(k.weights)
当我们有()
时,它便成为可调用对象,通常我们将()
用于函数和类。对于诸如()
等的数据类型,我们不使用int, str, float, list
。