Как обновить веса первого слоя в нейронной сети?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как обновить веса первого слоя в нейронной сети?

Сообщение Anonymous »

Я пытаюсь создать нейронную сеть без использования какой-либо библиотеки глубокого обучения, которая распознает числа в базе данных mnist. Его структура: 784 входных нейрона, 10 скрытых нейронов (только 1 скрытый слой) и 10 выходных нейронов.
Для скрытого слоя имеется 10 смещений.
Думаю, я знаю, как это сделать. обновить веса последнего слоя, но не первых, поскольку веса последнего слоя влияют на результат. Я тоже не знаю, как обновлять предубеждения. Если я допустил ошибку при последнем обновлении слоя, сообщите мне об этом.
Вот код:

Код: Выделить всё

#forward propagation
def forward(inp, w1, w2, biases):
hidsRes = []
outRes = []

for i in range(len(w1)):
n = np.dot(inp, w1[i])

n += biases[i]
n = relu(n)

hidsRes.append(n)

for i in range(len(w2)):
n = np.dot(hidsRes, w2[i])

outRes.append(n)

return softmax(outRes)

#backpropagation
def back(avgResult, w1, w2, lr):
for i, w in enumerate(w2):
w2[i] += lr * avgResult[i] #I only update the last layer based on the average error of each neuron

def train(inps, hids, outs, randomWeightDiff, batchs, gens, lr):
w1, w2, b = initNn(inps, hids, outs, randomWeightDiff)

#loading the mnist dataset
x_train, x_test, y_train, y_test = getData()

for gen in range(gens):
errors = []

x_train, y_train = shuffle(x_train, y_train)

for batch in range(batchs):
prediction = forward(tolist(x_train[batch].tolist()), w1, w2, b)
y = y_train[batch]

target = [0 if i != y else 1 for i in range(10)]

errors.append([prediction[i] - target[i] for i in range(10)])

print(errors)

avg = [sum([errors[i][j] for j in range(len(errors))]) / 10 for i in range(10)]

back(avg, w1, w2, lr)
print("Generation {gen} \n" + f"{avg}")

train(784, 10, 10, 2, 100, 1000, 0.01)
Я пробовал смоделировать множество нейронных сетей и изменить лучшие из них, но это было слишком медленно и не работало.
А еще, если Научусь обновлять первый слой, смогу делать более сложные нейронные сети.
Кстати, я не разбираюсь в сложной математике, поэтому поиск в интернете не помог меня выгнали, так как я молодой.

Подробнее здесь: https://stackoverflow.com/questions/785 ... al-network
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»