>使用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)