Ошибка относительно форм, не выровненных по обратному распространению

Я новичок в машинном обучении и в настоящее время учусь на веб-сайте Майкла Нильсена... В настоящее время я запускаю код для распознавания рукописных цифр... Код точно такой же, как на веб-сайте, но я сталкиваюсь с ошибкой в ​​функции обратного распространения... .

def backprop(self, x, y):
    """Return a tuple ``(nabla_b, nabla_w)`` representing the
    gradient for the cost function C_x.  ``nabla_b`` and
    ``nabla_w`` are layer-by-layer lists of numpy arrays, similar
    to ``self.biases`` and ``self.weights``."""
    nabla_b = [np.zeros(b.shape) for b in self.biases]
    nabla_w = [np.zeros(w.shape) for w in self.weights]
    # feedforward
    activation = x
    activations = [x]  # list to store all the activations, layer by layer
    zs = []  # list to store all the z vectors, layer by layer
    for b, w in zip(self.biases, self.weights):
        z = np.dot(w, activation) + b
        zs.append(z)
        activation = sigmoid(z)
        activations.append(activation)
    # backward pass
    delta = self.cost_derivative(activations[-1], y) * \
            sigmoid_prime(zs[-1])
    nabla_b[-1] = delta
    nabla_w[-1] = np.dot(delta, activations[-2].transpose())
    # Note that the variable l in the loop below is used a little
    # differently to the notation in Chapter 2 of the book.  Here,
    # l = 1 means the last layer of neurons, l = 2 is the
    # second-last layer, and so on.  It's a renumbering of the
    # scheme in the book, used here to take advantage of the fact
    # that Python can use negative indices in lists.
    for l in xrange(2, self.num_layers):
        z = zs[-l]
        sp = sigmoid_prime(z)
        delta = np.dot(self.weights[-l + 1].transpose(), delta) * sp
        nabla_b[-l] = delta
        nabla_w[-l] = np.dot(delta, activations[-l - 1].transpose())
    return (nabla_b, nabla_w)

В приведенном выше коде ошибка находится в следующей строке:

z = np.dot(w, activation) + b

Ошибка:

ValueError: shapes (784,30) and (784,1) not aligned: 30 (dim 1) != 784 (dim 0)

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


person Talha Wahab    schedule 10.02.2019    source источник
comment
Попробуйте распечатать каждую фигуру для используемых вами массивов. Проблема в неправильной форме для + или .dot. И что вы можете легко сделать, так это просто записать, какие формы вам нужны, и сверить их с кодом.   -  person sooobus    schedule 10.02.2019
comment
Проверьте эту ссылку Он объяснил это ясно. проверьте это   -  person Veer    schedule 07.05.2019