Я пытаюсь начать с нейронных сетей с самого начала.Это значит начать играть с персептронами.В данный момент я пытаюсь реализовать пакетный градиентный спуск.Следующее руководство содержит следующий псевдокод:
Я попытался реализовать, как показано ниже, с некоторыми фиктивными данными, и заметил, что он не особенно точен.Это сходится к тому, что я предполагаю, это некоторые локальные минимумы.
Мой вопрос:
Какие у меня есть способы проверить, что это на самом деле локальные минимумы, я изучал, как построить это, но яне знаете, как на самом деле делать это.В дополнение к этому, есть ли способ добиться более точного результата с использованием градиентного спуска?Или мне придется использовать более сложный подход, или, возможно, запустить его много раз, начиная с разных случайных весов, чтобы попытаться найти глобальный минимум?
Я просматривал форум, прежде чем опубликовать это, но не сталЯ не могу найти много информации, которая бы убедила меня в том, что я здесь делаю или что происходит на самом деле правильно, поэтому любая помощь будет очень полезна.
import pandas as pd
import numpy as np
import random
import math
def main():
learningRate = 0.1
np.random.seed(1)
trainingInput = np.asmatrix([
[1, -1],
[2, 1],
[1.5, 0.5],
[2, -1],
[1, 2]
])
biasAccount = np.ones((5,1))
trainingInput = np.append(biasAccount, trainingInput, axis=1)
trainingOutput = np.asmatrix([
[0],
[1],
[0],
[0],
[1]
])
weights = 1 * np.random.random((3,1))-1
for iteration in range(10000):
prediction = np.dot(trainingInput, weights)
print("Weights: \n" + str(weights))
print("Prediction: \n" + str(prediction))
error = trainingOutput - prediction
print("Error: \n" + str(error))
intermediateResult = np.dot(error.T, trainingInput)
delta = np.dot(learningRate, intermediateResult)
print("Delta: \n" + str(delta))
weights += delta.T
main()