1

我正在尝试学习用于机器学习的Torch库。

我知道 Torch 的重点是神经网络,但为了它,我试图在它上面运行 kmeans。如果没有,Torch 实现了快速连续存储,这应该类似于 numpy 数组,并且Torch备忘单引用unsup库进行无监督学习,为什么不呢?

我已经有一个用于 K-means 实现的基准。尽管那里的所有实现都故意使用未优化的算法(自述文件解释了原因),但 LuaJIT 能够在 611 毫秒内聚集 100000 个点。Nim(不在存储库上)中的优化(或者我应该说,不是故意减慢)实现在 68 毫秒内运行,所以我期待介于两者之间。

不幸的是,事情变得更糟了,所以我怀疑我做错了什么。我写的是

require 'io'
cjson = require 'cjson'
require 'torch'
require 'unsup'

content = io.open("points.json"):read("*a")
data = cjson.decode(content)
points = torch.Tensor(data)
timer = torch.Timer()
centroids, counts = unsup.kmeans(points, 10, 15)

print(string.format('Time required: %f s', timer:time().real))

运行时间约为6秒!

谁能检查我在使用 Torch/unsup 时是否做错了什么?

如果有人想尝试,该文件points.json在上面的存储库中

4

1 回答 1

1

谁能检查我在使用 Torch/unsup 时是否做错了什么?

一切听起来都正确(注意:local建议使用变量):

  • data是一个二维表,您使用相应的Torch 构造函数
  • points是具有 nb 的二维张量。行= nb。点数和 nb。cols = 点维度(此处为 2)。这是unsup.kmeans 期望的 input

您可以做的是更改批量大小(第 4 个参数)。它可能会影响性能。您还可以使用详细模式来输出每次迭代的平均时间:

-- batch size = 5000, no callback, verbose mode
centroids, counts = unsup.kmeans(points, 10, 15, 5000, nil, true)
于 2015-03-21T11:38:54.360 回答