4

私は 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 と表示されます

4

2 に答える 2

1

すべてのピクセルを使用しないでください。

K-Means は通常、使用するピクセルが 10% 以下の場合、ほぼ同じ結果を返します。平均を計算し、さらに情報を追加しても、データの分布が異なる場合を除き、平均はそれほど変化しないためです。

ピクセルの 10% のみを使用すると、アプリケーションで使用するメモリが大幅に削減されます。

于 2013-07-17T08:01:25.423 に答える
0

操作の持続的なメモリ使用量を減らすことができない場合は、アプリ内のメモリ割り当てを増やすか、別のプロバイダーに変更するためのアドバイスについて、この回答を探す必要があります。月額 $20 の場合、これはラックスペース サーバーの単純な要求ですが、定義上は金属に近く、より多くのセットアップが必要です。

于 2013-07-17T03:26:57.733 に答える