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