我在玩scikit学习库的字典学习,我想建立一个基于图像序列的字典。我尝试使用partial_fit
的MiniBatchDictionaryLearning
方法,并注意到它比fit
要长得多。我的代码看起来如何(以lena为例):
import numpy as np
from scipy.misc import lena
from sklearn.decomposition import MiniBatchDictionaryLearning
from sklearn.feature_extraction.image import extract_patches_2d
lena = lena()
lena = lena[::2, ::2] + lena[1::2, ::2] + lena[::2, 1::2] + lena[1::2, 1::2]
height, width = lena.shape
patch_size = (7, 7)
data = extract_patches_2d(lena, patch_size)
data = data.reshape(data.shape[0], -1)
dico = MiniBatchDictionaryLearning(n_components=100, n_iter=500,transform_algorithm ='lars', alpha=1,transform_n_nonzero_coefs=5,verbose=1)
dicObj = dico.partial_fit(data)
这需要很长时间才能完成,而如果我将partial_fit
替换为fit
。。。需要几秒钟。在
(我让scikit学习15.2)
为什么会这样?在
这很可能是因为
partial_fit
是要对小批量数据调用的。在方法}则处理您提供的完整数据(如果您提供的样本太多,这可能需要很长时间)。
fit
实际上与partial_fit
相同,它调用一个在线词典学习函数。区别在于fit
使用对象构造时指定的批处理大小,默认情况下为3,而{partial_fit
不是为此而设计的)。在Here是函数,因此您可以看看发生了什么。在
相关问题 更多 >
编程相关推荐