Ошибка модификации веса тренировки Perceptron - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь реализовать персептрон с нуля, и у меня возникают проблемы с моей функцией обучения.Мои веса каким-то образом заканчиваются как значения NaN после тренировки, и я не могу определить, почему это может быть.

def train(self, observations, labels, epochs):
    pop_size_multip = int(epochs/len(observations))

    for num_of_iterations in range(pop_size_multip):
        for label_index,training_observation in enumerate(observations):
            #get weighted pred
            weighted_pred = np.dot(training_observation, self.w) + self.b
            #alter bias and alter weights by error value, lr, and observation vals
            self.b += ((labels[label_index] - weighted_pred) * self.lr)
            self.w += ((labels[label_index] - weighted_pred) * self.lr * training_observation)

    None

Что-то явно не так?

Примечания self.b = смещение, self.lr = скорость обучения, self.w = массив np из 30 весовот -1 до 1. Каждое наблюдение из тренировочного набора содержит 30 признаков.метки содержат целые числа (0 или 1), weighted_pred - это число с плавающей точкой, self.lr - число с плавающей точкой, training_observation имеет число с плавающей точкой.Последняя линия.Умножение training_observation (массив NP) - это преобразование self.w в массив массивов, что не является моим предполагаемым эффектом.Мне нужно получить суммирование по одному значению.

...