ValueError: setting an array element with a sequence

Пытаюсь обучить нейросеть на двух массивах, но при обучении выдает ошибку

ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (4,) + inhomogeneous part.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# Задание матриц R и Q
R_matrix = np.array([[08.77, 09.33, 07.33, 07.15, 06.96, 05.67, 06.04, 05.59, 05.52, 06.04, 05.39, 02.89],
                      [06.28, 06.78, 06.50, 07.14, 08.14, 07.17, 05.71, 05.50, 05.36, 05.96, 05.71, 04.50],
                      [08.78, 12.69, 09.67, 08.66, 08.42, 06.05, 05.52, 05.32, 05.93, 07.94, 08.54, 07.62],
                      [05.00, 04.85, 50.26, 08.17, 04.63, 03.97, 03.97, 04.89, 05.15, 05.59, 04.93, 06.44]])

Q_matrix = np.array([[12.85, 13.42, 13.3, 13.36, 13.03, 13.43, 13.02, 13.25, 13.67, 14.01, 13.96, 14.09],
                     [15.24, 15.76, 16.16, 16.17, 15.86, 15.76, 16.52, 16.45, 15.16, 16.43, 15.9, 15.79],
                     [15.22, 15.92, 14.72, 15.42, 15.32, 14.97, 15.32, 16.12, 19.2, 20.49, 21.39, 22.78],
                     [16.6, 16.92, 16.52, 16.18, 16, 15.86, 16.21, 16.04, 16.32, 16.24, 16.74, 16.2]])

# Проверка формы матриц
if R_matrix.shape[1] != Q_matrix.shape[1]:
    raise ValueError("Матрицы R и Q должны иметь одинаковое количество столбцов.")

# Количество входных и выходных нейронов
input_size = R_matrix.shape[1]
output_size = Q_matrix.shape[1]

# Количество скрытых нейронов
hidden_size = 8

# Инициализация весов и смещений
weights_input_hidden = np.random.randn(input_size, hidden_size)
weights_hidden_output = np.random.randn(hidden_size, output_size)
bias_hidden = np.random.randn(hidden_size)
bias_output = np.random.randn(output_size)

# Функция активации сигмоида
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# Функция для вычисления выходных значений сети
def predict(input_data, weights_input_hidden, weights_hidden_output, bias_hidden, bias_output):
    # Вычисление выходных значений скрытого слоя
    hidden_layer_activation = np.dot(input_data, weights_input_hidden) + bias_hidden
    hidden_layer_output = sigmoid(hidden_layer_activation)
    
    # Вычисление выходных значений сети
    network_output = np.dot(hidden_layer_output, weights_hidden_output) + bias_output
    
    return network_output

# Функция ошибки - средняя квадратичная ошибка
def mean_squared_error(output, target):
    return np.mean((output - target) ** 2)

# Функция для обучения сети с помощью обратного распространения ошибки
def train(input_data, output_data, weights_input_hidden, weights_hidden_output, bias_hidden, bias_output):
    # Функция для минимизации ошибки
    def minimize_error(params):
        weights_input_hidden, weights_hidden_output, bias_hidden, bias_output = params
        predictions = predict(input_data, weights_input_hidden, weights_hidden_output, bias_hidden, bias_output)
        error = mean_squared_error(predictions, output_data)
        return error
    
    # Объединение параметров сети в один массив
    params = (weights_input_hidden, weights_hidden_output, bias_hidden, bias_output)
    
    # Обучение сети с помощью метода обратного распространения ошибки
    minimized = minimize(minimize_error, params, method='L-BFGS-B', jac=False)
    
    # Возвращение обученных параметров сети
    return minimized.x

# Обучение сети
trained_params = train(R_matrix, Q_matrix, weights_input_hidden, weights_hidden_output, bias_hidden, bias_output)

# Распаковка обученных параметров
weights_input_hidden = trained_params[0]
weights_hidden_output = trained_params[1]
bias_hidden = trained_params[2]
bias_output = trained_params[3]

# Прогнозирование значений Q-матрицы
predicted_Q = predict(R_matrix, weights_input_hidden, weights_hidden_output, bias_hidden, bias_output)

# Отображение результатов
for i in range(len(predicted_Q)):
    for j in range(len(predicted_Q[i])):
        print(f"Входное значение: {R_matrix[i][j]:.2f}, Прогнозируемое значение: {predicted_Q[i][j]:.2f}")

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