Ошибка памяти Python при попытке сделать скалярное произведение между двумя массивами - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь использовать производную softmax https://medium.com/@aerinykim/how-to-implement-the-softmax-derivative-independently-from-any-loss-function-ae6d44363a9d

Я использую эту функцию:

def softmax_grad(softmax):
    s = softmax.reshape(-1,1)
    return np.diagflat(s) - np.dot(s, s.T)

и когда я звоню, я получаю эту ошибку

<ipython-input-72-4aed1c61658a> in softmax_prime(x)
      6 
      7     s = x.reshape(-1,1)
----> 8     return np.diagflat(s) - np.dot(s, s.T)

D:\anaconda\lib\site-packages\numpy\lib\twodim_base.py in diagflat(v, k)
    306     s = len(v)
    307     n = s + abs(k)
--> 308     res = zeros((n, n), v.dtype)
    309     if (k >= 0):
    310         i = arange(0, n-k)

MemoryError: 

это из-за размера? массив, который я передаю в качестве параметра, имеет размер (100, 60000), а скалярное произведение находится между фигурами (600000, 1) (1, 600000)

1 Ответ

0 голосов
/ 30 апреля 2018

Это приведет к массиву размером (600000, 600000), который, как я предполагаю, не помещается в вашу рабочую память.

...