Проблема при умножении разных по размерности матриц в 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)

Ответы (0 шт):