使用 scikit learn 在字典学习中出现内存错误
Posted
技术标签:
【中文标题】使用 scikit learn 在字典学习中出现内存错误【英文标题】:Getting memory error in Dictionary Learning using scikit learn 【发布时间】:2017-07-16 04:54:08 【问题描述】:我有 50 张尺寸为 1028x1028 的图像。我试图通过从 50 张图像中随机抽取几个补丁来制作字典。
这是我的代码 =>
from os import listdir
from time import time
import matplotlib.pyplot as plt
import numpy as np
import scipy as sp
from sklearn.decomposition import MiniBatchDictionaryLearning
from sklearn.feature_extraction.image import extract_patches_2d
from sklearn.feature_extraction.image import reconstruct_from_patches_2d
from sklearn.utils.fixes import sp_version
from sklearn.datasets import load_sample_image
from scipy import ndimage
from skimage import color
from skimage import io
from PIL import Image
from sklearn.decomposition import SparseCoder
from sklearn.decomposition import sparse_encode
from skimage import data,restoration
from scipy.misc import imfilter, imread
from scipy.signal import convolve2d as conv2
import sys
from sklearn.feature_extraction import image
x = []
path = 'resize/'
c=0
for e in listdir(path):
matrix = np.asarray(Image.open(path+e).convert('L'))
x.append(matrix)
images = np.array(x)
input = np.asarray(Image.open('H03.bmp').convert('L'))
height , width = input.shape
patchsize = (7,14)
patches = image.PatchExtractor((7,14),10000,10).transform(images)
print(patches.shape)
data = patches.reshape(patches.shape[0], -1)
n_iter = 1000
dico = MiniBatchDictionaryLearning(n_components=100,alpha=3,n_iter=n_iter)
V = dico.fit_transform(data).components_
但在最后一行我得到了 MemoryError。这是错误=>
(480000, 7, 14) Traceback(最近一次调用最后一次):文件“new.py”,第 63 行,在
V = dico.fit_transform(data).components_ 文件“/usr/local/lib/python3.4/dist-packages/sklearn/base.py”,第 494 行,在 fit_transform 中
返回 self.fit(X, **fit_params).transform(X) 文件 "/usr/local/lib/python3.4/dist-packages/sklearn/decomposition/dict_learning.py", 第 1238 行,适合
return_n_iter=True) 文件 "/usr/local/lib/python3.4/dist-packages/sklearn/decomposition/dict_learning.py", 第 677 行,在 dict_learning_online 中
random_state=random_state) 文件“/usr/local/lib/python3.4/dist-packages/sklearn/utils/extmath.py”, 第 364 行,在 random_svd 中
power_iteration_normalizer, random_state) 文件 "/usr/local/lib/python3.4/dist-packages/sklearn/utils/extmath.py", 第 258 行,在随机范围查找器中
Q, _ = linalg.lu(safe_sparse_dot(A, Q), permute_l=True) 文件 "/usr/local/lib/python3.4/dist-packages/sklearn/utils/extmath.py", 第 189 行,在 safe_sparse_dot 中
return fast_dot(a, b) MemoryError
我不知道为什么会出现这个错误??
【问题讨论】:
基本上内存不足时会发生MemoryError。你没有足够的内存。你的系统配置是什么? i3 ,4GB ram...我认为运行这个程序没问题。 好的,@VikashSingh 先生,我只拍了 10 张图片。让我们看看会发生什么等等... Sudip 有什么更新吗? 是的,请稍等......我正在尝试运行 【参考方案1】:如 cmets 中所述。
MemoryError 基本上是在内存耗尽时发生的。你不 有足够的内存。你的系统配置是什么?
OP 回复:
我想,你是 r8.... 如果我拍几张照片,大约 10 张照片。然后 多亏了帮助,它工作正常。 ——
基本上用户的 RAM 空间不足。
【讨论】:
以上是关于使用 scikit learn 在字典学习中出现内存错误的主要内容,如果未能解决你的问题,请参考以下文章
python - 如何在python scikit-learn中进行字典向量化后预测单个新样本?
[机器学习与scikit-learn-45]:特征工程-特征选择(降维)-1-哈希向量