PCA分析引发了内存分配问题.如何在不降低图像分辨率或图像数量的情况下解决此问题



>使用PCA(主成分分析(从一组4K图像中提取特征,从而产生内存错误

文件 "/home/paul90/.local/lib/python3.6/site-packages/sklearn/deunit/_pca.py",第 369 行,fit_transform U, S, V = self._fit(X(

内存错误:无法分配形状为 (23339520, 40( 且数据类型为 float32 的数组

我正在尝试从 30K 图像中提取 4 个特征(# 个组件(并收到此错误。

  • 伪代码:

immatrix = np.array([np.array(Image.open(im, 'r'((.flatten(( for im in file_list], 'f'(

x = StandardScaler((.fit_transform(immatrix(

pc_train = pca.fit_transform(x(

文件列表是图像列表(目前我有 600 张图像(

我无法减少列表中的图像数量,也无法降低初始 4K 分辨率。在这种情况下,我该如何解决此内存分配问题?

如果有人能告诉我避免内存问题的步骤,那将是一个很大的帮助。

如此问题所述,您必须重新配置系统以使运行时系统可以使用更多 RAM。

但是,我怀疑您可以通过遍历图像来解决问题,而不是将它们全部加载到一个大的 NumPy 数组中。 您需要编写代码以串行执行相同的计算,而不是使用整体式处理工具。

较大的数据集通常无法放入内存中,因此无法以理论方式执行像 PCA 这样的操作。 sklearn还有另一个PCA函数,称为增量PCA,可以将其视为一个接受批处理的模型。由于您没有完整的代码可见,我将只复制示例的一部分,该示例同时执行 PCA 和增量 PCA,以便您了解想法。 该方法的文档位于此处。

# Authors: Kyle Kastner
# License: BSD 3 clause
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA, IncrementalPCA
iris = load_iris()
X = iris.data
y = iris.target
n_components = 2
ipca = IncrementalPCA(n_components=n_components, batch_size=10)
X_ipca = ipca.fit_transform(X)
pca = PCA(n_components=n_components)
X_pca = pca.fit_transform(X)

最新更新