Проблема при умножении разных по размерности матриц в numpy
Попытался сделать простую нейросеть методом обратного распространения ошибки.
С корректировкой весов второго скрытого слоя у меня вроде все получилось, а вот дальше - нет. Подскажите, пожалуйста, что делать, чтобы и остальные слои натренировать? Как мне избежать ошибки разных размерностей, но при этом использовать numpy?
import numpy as np
goal = 1
alpha = 0.0001
weights1 = np.array([[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]])
weights2 = np.array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
weights3 = [1, 1, 1]
weights3_learn = np.array([])
def reult_choice(matu):
return 1 if matu > 0 else 0
def neuro(input, weights):
pred = weights.dot(input)
return pred
def neuro1(sloy2, weights):
pred = sloy2.dot(weights)
return pred
def neuro2(pred, weights3):
pred = pred
for i in range(100):
weights3_result = weights3
predication = pred.dot(weights3_result)
error = (predication - 1) ** 2
for c in range(len(pred)):
direction_and_amount = (predication - goal) * pred[c]
weights3_result[c] = weights3_result[c] - direction_and_amount*alpha
print("Чистая ошибка: ", direction_and_amount, "Веса: ", weights3_result, "Предсказание: ", round(predication))
result_1 = np.array(1)
pred1 = result_1.dot(weights3_result)
pred1 = pred1.reshape(-1, 1)
weights3_learn = weights3_result
print("Massive : ", weights3_learn)
train_massive = np.array([[5, 5, 5, 5, 5]])
train_massive= train_massive.reshape(-1, 1)
neuro1_back(pred1, train_massive)
print(train_massive)
print(pred1)
return pred1
def neuro1_back(pred1, train_massive):
print("------------------------------------------------------------------------")
for i in range(100):
predication = train_massive.dot(pred1)
input = np.array([12341, 12, 5, True, True])
if input[0] > 30000: # стоимость аренды
input[0] = 0
else:
input[0] = 1
if input[1] > 32: # удаленность от станции метро
input[1] = 0
else:
input[1] = 1
if input[2] > 1: # количество комнат
input[2] = 1
else:
input[2] = 0
if input[3] == False: # парковка
input[3] = 0
else:
input[3] = 1
if input[4] == False: # wi-fi
input[4] = 0
else:
input[4] = 1
sloy2 = neuro(input, weights1)
matu = (neuro1(sloy2, weights2))
neuro2(matu, weights3)