ValueError: формы (50,50) и (3,1) не выровнены: 50 (dim 1)! = 3 (dim 0) - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь создать свое второе машинное обучение, но сейчас у меня действительно неприятная проблема.Я продолжаю получать эту ошибку:

ValueError: формы (50,50) и (3,1) не выровнены: 50 (dim 1)! = 3 (dim 0)

Как я могу исправить ошибку?

Моя нейронная сеть

class neural_net:

def __init__(self):
    self.weight = 2 * np.random.random((3, 1)) - 1

def sigmoid(self, x):
    return 1/(1 + np.exp(-x))

def sigmoid_derivative(self, x):
    return x * (1 - x)

def train(self, training_input, training_output, iteration):
    for _ in range(iteration):
        output = self.think(training_input)
        error = training_output - output
        adjust = np.dot(training_input, error * self.sigmoid_derivative(output))
        self.weight += adjust

def think(self, input):
    input = input.astype(float)
    output = self.sigmoid(np.dot(input, self.weight))
    return output

X = train_data[len(train_data) - 1][0] -> [152 147 146 143 150 151 151 150 147 149 156 143 121  69  58 105  70  69

66 145 107 144 154 145 154 160 154 158 159 171 167 164 167 160 123 152 152 144 148 116148 155 165 162 147 130 137 129 106 93] Y = train_data [len (train_data) - 1] [1]

nn = neural_net()
nn.train(X, Y, 3)

1 Ответ

0 голосов
/ 02 декабря 2018

Для умножения двух матриц количество столбцов первой матрицы должно быть равно количеству строк второй матрицы.В вашем случае столбцы X должны быть равны строкам self.weights.Но количество столбцов X равно 50, а число строк self.weights равно 3.

При определении весов для вашей нейронной сети вы всегда должны учитывать каналы входов и выходов.

Если входы имеют каналы n, а выходы имеют каналы m, форма весов должна быть (n, m).

Исходя из того, как вы получили доступ к X (train_data[len(train_data) - 1][0]), X представляет собой один образец формы (50,50).Если это правильно, то X должен быть преобразован в вектор перед подачей в нейронную сеть (при условии, что входной слой вашей сети полностью подключен к скрытому слою).То же самое касается Y.

X = X.reshape(1, -1) # X.shape == (1, 2500) 
Y = Y.reshape(1, -1) # Y.shape == (1, 2)

Теперь форма веса должна быть (2500, 2)

self.weight = 2 * np.random.random((2500, 2)) - 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...