2013-05-09 1 views
4

신경망을 학습하기 위해 212,243 × 2500의 조밀 한 행렬 phiy (212243) 및 w (2500)의 벡터가 있으며, numpy double의 배열. 내가 계산 노력하고있어 내 컴퓨터에 램이 6기가바이트 및 우분투 64에 스왑 16 기가 바이트가numpy의 거대한 행렬에 대한 연산

w = dot(pinv(phi), y) 
# serialize w... 
r = dot(w, transpose(phi)) 
# serialize r... 

입니다. 나는 계산을 두 번 시작했고 약 두 시간 만 작업 한 후에 시스템 (파이썬이 아닌) 스왑 오류로 끝났다.

컴퓨터에서이 계산을 수행하는 방법이 있습니까? 파이썬으로 처리 할 필요는 없습니다.

+2

[h5py] (https://code.google.com/p/h5py/)를 확인해야합니다. 이는 이전에 http://stackoverflow.com/a/3315055/1258806에서 제안되었으며 비슷한 질문에 답합니다. – fgb

+1

나를 위해 일합니다. 알맞은 시스템에서 Python 3.3 64 비트, numpy-MKL 1.7.1, Core i7, 32GB RAM, Windows 8을 몇 분만 사용했습니다. – cgohlke

+0

fgb가 말하는 것과 유사하게 [Pytables] (http : // www.pytables.org/). 그들은 모두 동일한 기본 기술 (HDF 및 numpy iirc)을 사용합니다. – Brad

답변

0

보자 : 당신이 메모리에 전체 행렬을 보유 할 필요가 얼마나 많은 메모리의

212,243 row values * 2500 col values * 8 bytes/value = 4,244,860,000 bytes = 4GB 

합니다.

이것이 자바 인 경우 JVM에서 최대 힙을 늘리는 것이 좋습니다. 나는 파이썬에 대한 비유가 무엇인지 모른다. 더 빨리 약 2 배를 실행하고 절반 중간 저장소를 사용 내 시스템에서

w = np.linalg.lstsq(phi, y)[0] 

: 당신은 컴퓨팅 w보다 무엇을위한 의사 - 필요하지 않은 경우

+0

그러나 RAM의 2/3이''phi '로 잡히면 내포물의 일부로 계산 된 의사 역행렬의 중간 결과를 어디에 저장할 것입니까? – fgb

3

는 함께 그 라인을 교체합니다.