Вариант алгоритма - алгоритм Дельта / Уидроу-Хоффа. Тренер не получает желаемых весов, когда прогнозирование жестко ограничено
for _ in range(num_epochs=200):
if(learning == "delta"):
a = self.predict(X) // Predict gives output that is hard limited
for i in range(0,X.shape[1],batch_size):
start and end identified according to batch size
x = np.dot(y[:,start:end]-a[:,start:end],np.linalg.pinv(X[:,start:end]))
self.set_weights(self.weights + alpha*x)
Тестирование Я создал набор данных, рандомизированные веса, создал выходные данные из веса, и использовали те же выходные данные и оригинал, чтобы получить обратно веса = случайные веса
количество эпох = 200 batch_size = 10 dataset_length = 100
Лучший результат, который я смог построить, был равен 0,2 % on np.testing.assert_array_almost_equal () функция, получая в результате линейного преобразования в отличие от жесткого ограничения в поезде. Вне поезда я снова и снова буду жестко ограничивать.
Запуск одного и того же кода в линейном преобразовании повсюду, начиная с получения выходных данных для рандомизированных весовых коэффициентов и прогнозирования весовых коэффициентов на основе входных и сгенерированных выходных данных. Дает мне очень точные результаты.