有没有办法减少小批量 kmeans 的内存使用?
Posted
技术标签:
【中文标题】有没有办法减少小批量 kmeans 的内存使用?【英文标题】:Is there a way to reduce memory usage of mini-batch kmeans? 【发布时间】:2017-09-07 05:33:23 【问题描述】:我正在处理一个包含 500 个维度的 640 万个样本的数据集,我正在尝试将其分组为 200 个集群。我被限制为 90GB 的 RAM,当我尝试从 sklearn.cluster 运行 MiniBatchKmeans 时,操作系统会因占用过多内存而终止进程。
这是代码:
data = np.loadtxt('temp/data.csv', delimiter=',')
labels = np.genfromtxt('temp/labels', delimiter=',')
kmeans = cluster.MiniBatchKMeans(n_clusters=numClusters, random_state=0).fit(data)
predict = kmeans.predict(data)
Tdata = kmeans.transform(data)
它没有通过聚类。
【问题讨论】:
对不起,我之前的回答是错误的。我错过了你没有使用 GPU,但实际上用完了主 RAM。 我确实有 GPU 访问权限。你认为我可以在不占用太多内存的情况下重写它以在 GPU 上工作吗? 不,您要做的是延迟加载数据文件,即。 e.一块一块的。我知道这是可能的,而且不是很困难,但不幸的是,现在不记得具体细节了。 【参考方案1】:我认为您也可以尝试降低数据的精度以减少分配的内存量。尝试使用 float32 而不是默认值。
【讨论】:
【参考方案2】:解决方案是使用 sklearn 的 partial_fit
方法 - 并非所有算法都有此选项,但 MiniBatchKMeans
有。
所以你可以“部分”训练,但你必须拆分数据而不是一次性读取所有数据,这可以通过生成器完成,有很多方法可以做到,如果你使用 pandas例如,您可以使用this。
那么,你应该使用partial_fit
来训练,而不是使用fit
。
【讨论】:
以上是关于有没有办法减少小批量 kmeans 的内存使用?的主要内容,如果未能解决你的问题,请参考以下文章
使用太多内存来减少图像尺寸......有没有办法使用更少的内存来做到这一点?
当我增加批量大小时,为啥 tensorflow GPU 内存使用量会减少?