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}")