Как (можно?) Я векторизовать учебный ввод NN вместо использования цикла for?Есть ли другие большие оптимизации? - PullRequest
1 голос
/ 28 апреля 2019

Я пытаюсь создать простую нейросетевую программу / модуль. Поскольку я использую Pythonista на iPad Pro, скорость может немного улучшиться. Насколько я понимаю, для циклов for много накладных расходов, поэтому мне было интересно, можно ли обучить 50000 входных данных: наборы целей с использованием некоторой формы векторизации.

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

# train function that accepts inputs and targets
# currently called inside a for loop
# input: [[a], [b]], target: [[c]]
def train(self, input_mat, target_mat):
        # generate hidden layer neuron values
        hidden = self.weights_in_hid.dot(input_mat)
        hidden += self.bias_hid
        hidden = sigmoid(hidden)
        # generate output neuron values
        output_mat = self.weights_hid_out.dot(hidden)
        output_mat += self.bias_out
        # activation function
        output_mat = sigmoid(output_mat)
# more of the function continues 


# ...
# Datum converts simple lists into numpy matrices, so they don’t have to be reinstantiated 50000 times
training_data = [
        Datum([0, 0], [0]), 
        Datum([0, 1], [1]), 
        Datum([1, 0], [1]), 
        Datum([1, 1], [0]), 
    ]
# ...
# XXX Does this for loop cause a lot of the slowdown?
for _ in range(50000):
        datum = rd.choice(training_data)        
        brain.train(datum.inputs, datum.targets)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...