Попытка создать простую нейронную сеть и получить ошибку ValueError. Формы не выровнены.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Попытка создать простую нейронную сеть и получить ошибку ValueError. Формы не выровнены.

Сообщение Anonymous »

В моем университете есть задача создать простую (думаю, не для меня) нейронную сеть, которая угадывает пол человека по заданному весу и росту. Проблема в том, что мы перешли к этому сразу после выполнения задач print hello world, и я почти ничего не понимаю. После долгих поисков в Google, прыжков, копирования/вставки и молитв Гвидо ван Россуму я придумал следующее:

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

# Importing the numpy library
import numpy as np

# Function to calculate the sigmoid of a number
def sigmoid(x):
return 1 / (1 + np.exp(-x))

# Function to calculate the derivative of the sigmoid
def sigmoid_derivative(x):
return x * (1 - x)

# Class representing a neuron
class Neuron:
def __init__(self, weights, bias):
self.weights = weights
self.bias = bias

# Method to feed forward the inputs through the neuron
def feedforward(self, inputs):
total = np.dot(self.weights, inputs) + self.bias
return sigmoid(total)

# Class representing a neural network
class NeuralNetwork:
def __init__(self):
# Creating random weights and biases for each layer
self.weights1 = np.random.rand(2, 2)
self.weights2 = np.random.rand(2, 1)
self.bias1 = np.zeros((2, 1))
self.bias2 = np.zeros((1, 1))

# Creating instances of neurons for each layer
self.h1 = Neuron(self.weights1, self.bias1)
self.h2 = Neuron(self.weights1, self.bias1)
self.o1 = Neuron(self.weights2, self.bias2)

# Method to feed forward the inputs through the network
def feedforward(self, x):
out_h1 = self.h1.feedforward(x)
out_h2 = self.h2.feedforward(x)
out_o1 = self.o1.feedforward(np.array([out_h1, out_h2]).T)
return out_o1

# Method to train the network
def train(self, inputs, targets, epochs):
for epoch in range(epochs):
hidden_layer = sigmoid(np.dot(self.weights1, inputs) + self.bias1)
output_layer = sigmoid(np.dot(self.weights2.T, hidden_layer) + self.bias2)

output_error = targets - output_layer
output_delta = output_error * sigmoid_derivative(output_layer)

hidden_error = np.dot(self.weights2, output_delta) * sigmoid_derivative(hidden_layer)
self.weights2 += np.dot(hidden_layer.T, output_delta)
self.bias2 += np.sum(output_delta, axis=0, keepdims=True)

self.weights1 += np.dot(inputs, hidden_error.T)
self.bias1 += np.sum(hidden_error, axis=0, keepdims=True)

# Creating an instance of the neural network
network = NeuralNetwork()

# Input data - weight and height of 5 people
inputs = np.array([[60, 170], [50, 160], [70, 180], [40, 150], [80, 190]])

# Desired outputs - gender of the person (0 - female, 1 - male)
targets = np.array([[1], [1], [1], [0], [1]])

# Training the network
network.train(inputs.T, targets, 10000)

# Predicting the gender for new data
test_inputs = np.array([[65, 175], [55, 165], [75, 185]])
test_outputs = network.feedforward(test_inputs.T)

print("Predicted gender:")
for i, output in enumerate(test_outputs):
if output > 0.5:
print(f"Person {i+1}: Male")
else:
print(f"Person {i+1}: Female")
И я получаю эту ошибку:

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

hidden_error = np.dot(self.weights2, output_delta) * sigmoid_derivative(hidden_layer)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: shapes (2,1) and (5,5) not aligned: 1 (dim 1) != 5 (dim 0)
Я понимаю, что пытаюсь перемножить матрицы разных размеров, но понятия не имею, что еще делать. Если у меня была такая ошибка, то в большинстве случаев транспонирование матриц помогло (я думаю... по крайней мере сообщение об ошибке пропало), но в данном случае это не поможет, так что... Я застрял и мне нужна ваша помощь .

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • C++ Как создать нейронную сеть с игровым обучением? [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Как создать нейронную сеть для регрессии?
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Как правильно нормализовать спутниковые изображения для подачи в нейронную сеть?
    Anonymous » » в форуме Python
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Построить нейронную сеть из csv [закрыто]
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Как обучить нейронную сеть со сдвигающимся окном?
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

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