【发布时间】:2013-07-15 09:48:55
【问题描述】:
我正在 App Engine 上开发一个应用程序,并且正在使用来自 SciPy 的 kmeans2。
集群运行时出现这个错误:
Exceeded soft private memory limit with 159.852 MB after servicing 1 requests total
这是我正在做的,color_data 将是大约 500 万个 x、y、z 点:
def _cluster(color_data, k):
""" Clusters colors and return top k
Arguments:
----------
color_data
TYPE: list
DESC: The pixel rgb values to cluster
k
TYPE: int
DESC: number of clusters to find in the colors
Returns:
--------
sorted_colors
TYPE: list
DESC: A list of rgb centroids for each color cluster
"""
# make rgbs into x,y,z points
x,y,z = [],[],[]
for color in color_data:
x.append(color[0])
y.append(color[1])
z.append(color[2])
# averaged_colors are points at center of color clusters
# labels are cluster numbers for each point
averaged_colors, labels = kmeans2(array(zip(x,y,z)), k, iter=10)
# get count of nodes per cluster
frequencies = {}
for i in range(k):
frequencies[i] = labels.tolist().count(i)
# sort labels on frequency
sorted_labels = sorted(frequencies.iteritems(), key=itemgetter(1))
# sort colors on label they belong to
sorted_colors = []
for l in sorted_labels:
sorted_colors.append(tuple(averaged_colors[l[0]].tolist()))
return sorted_colors
如何在不到 128MB 的内存中做到这一点?
编辑: 在我的本地机器上,运行我的应用程序显示我的活动监视器中使用了大约 500 MB 的内存
【问题讨论】:
-
我相信 sklearn scikit-learn.org/stable/modules/clustering.html 中的 Mini-Batch K-means 实现在时间和空间上效率更高;但是,它不太准确。
-
您需要低于 128MB,F1 实例会让您在短时间内达到峰值,但不会持续很长时间,并且仍然会遇到问题。见developers.google.com/appengine/docs/adminconsole/…
-
MiniBatchKMeans 只为我节省了 20 MB,这使我在本地计算机上的空间约为 480 MB。还有很多
标签: python google-app-engine scipy cluster-analysis k-means