我如何(可以?)向量化NN训练输入,而不是使用for循环?还有其他大型优化吗?

时间:2019-04-28 00:39:07

标签: python-3.x numpy optimization vectorization

我正在尝试创建一个简单的神经网络程序/模块。因为我在iPad Pro上使用Pythonista,所以速度可能会有所提高。我的理解是for循环有很多开销,所以我想知道是否有可能使用某种形式的向量化训练50000个input:target集。

我一直在尝试寻找有关numpy数组如何通过函数的资源,但是很难把我的头缠起来。我一直在尝试创建一个大型数组,将“ 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)

在所示状态下,所有功能均正常运行,但速度有些慢。每当我尝试将所有数据传递到一个矩阵中时,该函数都无法将其向量化。相反,它尝试对整个矩阵进行操作,显然第一步会产生错误,因为数组太大。

0 个答案:

没有答案