我使用Windows Server 2016在GCP计算引擎上创建了一个虚拟机,在Europe-west2数据中心位置使用n1-highmem-4(4个vCPU,2.2 GHz CPU,26 GB内存)和50GB磁盘大小。
我在其中安装了Pycharm,我在一些分辨率为529x940的图像上使用python和scikit-learn运行一个简单的PCA。 但是,当我在(仅)1000 rgb图像上运行时,我得到以下错误:
Traceback (most recent call last):
File "C:/Users/User/PycharmProjects/Sample/Main.py", line 130, in <module>
pca.fit(data)
File "C:\Users\User\PycharmProjects\Sample\venv\lib\site-packages\sklearn\decomposition\pca.py", line 329, in fit
self._fit(X)
File "C:\Users\User\PycharmProjects\Sample\venv\lib\site-packages\sklearn\decomposition\pca.py", line 370, in _fit
copy=self.copy)
File "C:\Users\User\PycharmProjects\Sample\venv\lib\site-packages\sklearn\utils\validation.py", line 444, in check_array
array = np.array(array, dtype=dtype, order=order, copy=copy)
MemoryError
我的源代码如下:
import cv2
import numpy as np
import os
import matplotlib.pyplot as plt
from glob import glob
from sklearn.decomposition import PCA
from sklearn import neighbors
from sklearn import preprocessing
import shutil
data = []
i = 0
# Number of images
number = 800
# Load images from file
for filename in glob('Images/*.jpg'):
img = cv2.imread(filename)
height, width = img.shape[:2]
img = np.array(img)
if height == 529 and width == 940 and i < number:
i = i + 1
# Transpose each individual rgb image to a row
img = np.concatenate(img, axis=0)
img = np.concatenate(img, axis=0)
data.append(img)
# Normalisation
data = np.array(data)
Norm = preprocessing.Normalizer()
Norm.fit(data)
data = Norm.transform(data)
# PCA
pca = PCA(0.95)
pca.fit(data)
data = pca.transform(data)
print('Number of components:', pca.n_components_, '\n')
然而,当我在我的笔记本电脑上运行相同的python脚本时,它只有8 GB的RAM和2.7 GHz的CPU,那么在处理800个图像时我没有得到PCA的内存错误但是它根本没有完成合理的时间(需要超过8小时)!
如果我的内存非常大的GCP虚拟机中的PCA的800 rgb图像出现内存错误怎么可能?我的笔记本电脑上的内存非常低,我不知道它?