Инициализация класса Python со списком / массивом - PullRequest
0 голосов
/ 07 февраля 2019

Я не могу инициализировать класс списком

Это проблема градиентного спуска, я хочу создать объект со списком (весами).

Я пытался использовать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() вернет массив весов, но я даже не могу инициализироватькласс

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Ваш __init__ не работает так, как вы хотите, потому что вы использовали аргументы ключевых слов вместо позиционных аргументов в вашем методе __init__, он должен быть похож на def __init__(self, weights) вместо 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__ будет позиционным, а не ключевым словом:

point = Point([10, 14, 15, 10, 5])
print(point.weights)
0 голосов
/ 07 февраля 2019

Вы пытаетесь вызвать массив как функцию.Вам нужно попробовать это следующим образом

w = [10, 14, 15, 10, 5]
k = Point(w)
print(k.weights)

, когда у нас есть (), тогда он становится вызываемым, обычно мы используем () для функций и классов.Мы не используем () для типов данных, таких как int, str, float, list и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...