Python 3 вызывает ошибку памяти в случайном порядке (X, Y), где X - 36000 3-канальных изображений (36000, 256,256,3), а Y - 3-канальные нормальные данные (36000, 256,256,3) - PullRequest
0 голосов
/ 04 июня 2019

На следующем рисунке показано использование памяти: Image showing Memory Usage Произошла ошибка памяти.Я использую Numpy и Python3.У меня есть два массива фигуры (36000,256,256,3) каждый в виде X и Y, и возникает ошибка памяти, когда я выполняю следующий код.Это код для подготовки данных обучения.Есть ли другой способ сделать это, который использует меньше памяти?

Это мой процессор: Intel® Xeon(R) CPU E5-2620 v4 @ 2.10GHz × 32

Ошибка отображается в: X, Y = shuffle(X,Y)

X = []
Y = []

    for im , normal in zip(images,normals) :
        image =  getImageArr(dir_resize_mRGB + im , 256 , 256 ) 
        X.append(image)
        Y.append( getNormalArr( dir_resize_mNormal + normal , 256 , 256 )  )

    X, Y = np.array(X) , np.array(Y)


    print(X.shape)

    X_min = np.min(X)
    X_max = np.max(X)

    X = (X-X_min)/(X_max-X_min)
    print('min:{}, max:{}'.format(X_min, X_max))

    train_rate = 0.85
    np.random.seed(42)
    index_train = np.random.choice(X.shape[0],int(X.shape[0]*train_rate),replace=False)
    index_test  = list(set(range(X.shape[0])) - set(index_train))

    X, Y = shuffle(X,Y)
    X_train, y_train = X[index_train],Y[index_train]
    X_test, y_test = X[index_test],Y[index_test]
Traceback (most recent call last):
  File "our_train_normal.py", line 312, in <module>
    X, Y = shuffle(X,Y)
  File "/home/ivlab/anaconda2/envs/tuto/lib/python3.7/site-packages/sklearn/utils/__init__.py", line 403, in shuffle
    return resample(*arrays, **options)
  File "/home/ivlab/anaconda2/envs/tuto/lib/python3.7/site-packages/sklearn/utils/__init__.py", line 327, in resample
    resampled_arrays = [safe_indexing(a, indices) for a in arrays]
  File "/home/ivlab/anaconda2/envs/tuto/lib/python3.7/site-packages/sklearn/utils/__init__.py", line 327, in <listcomp>
    resampled_arrays = [safe_indexing(a, indices) for a in arrays]
  File "/home/ivlab/anaconda2/envs/tuto/lib/python3.7/site-packages/sklearn/utils/__init__.py", line 216, in safe_indexing
    return X.take(indices, axis=0)
MemoryError

1 Ответ

0 голосов
/ 04 июня 2019

Непонятно, является ли это пользовательская функция shuffle или numpy.random.shuffle , которая, по-видимому, принимает только один массив.

Если вы работаете с Out Of Memoryошибка, вы должны сначала попытаться выполнить выборку ваших массивов, например X = X[100, :] и Y = Y[100, :], и убедиться, что это действительно из-за превышения памяти.

Чтобы перетасовать два массива в одном порядке, я предлагаю использовать numpy.random.permutation , что даст вам список индексов.

shuff_indx = numpy.random.permutation(X.shape[0])
X = X[shuff_indx, :]
Y = Y[shuff_indx, :]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...