VLFeat:vl_kmeans 中某些簇的 ValueError
Posted
技术标签:
【中文标题】VLFeat:vl_kmeans 中某些簇的 ValueError【英文标题】:VLFeat: ValueError for certain number of clusters in vl_kmeans 【发布时间】:2016-05-22 03:28:33 【问题描述】:我有一个大小为 301 x 4096 的数组,我想为其计算 VLAD 向量。
我尝试使用
进行量化center, assignments = vlfeat.vl_kmeans(data,8)
但这会返回
ValueError:解包的值太多
如果我将集群数量从 8 个更改为 2 个,它会起作用。 我也尝试过其他数字,但它们都返回了相同的 ValueError。除了,当它设置为 1 时,它会返回
ValueError: 需要超过 1 个值才能解压
会不会和我数据中的样本数量有关?
【问题讨论】:
它与函数返回的项目数有关。如果大于 2,你会得到too many values to unpack
,当它小于 2 时,你会得到more than 1 value to unpack
。
+ see this。它返回一个命名元组,这是一个包含你的东西的单个对象。
@BurhanKhalid 意味着它应该总是两个?那么如何指定其他簇数呢?
【参考方案1】:
VLFeat 的这个非官方 Python 接口的源代码可在 Github 上找到。
vl_kmeans
函数默认只返回centers
,所以只有一个值可以解压:
import numpy as np
import vlfeat
x = np.random.rand(10, 8)
centers = vlfeat.vl_kmeans(x, 3)
生成的 centers
数组将具有 (3, 8)
的形状,即 3 个中心中的每个中心都有一个 8 维点。
如果您想获得每个输入的分配,您必须将选项quantize
传递给vl_kmeans
函数。然后,该函数确实返回了centers
和assignment
,并且按预期工作:
centers, assignments = vlfeat.vl_kmeans(x, 3, quantize=True)
【讨论】:
以上是关于VLFeat:vl_kmeans 中某些簇的 ValueError的主要内容,如果未能解决你的问题,请参考以下文章
Invalid MEX-file 'E:\vlfeat-0.9.18\toolbox\mex\mexw64\vl_kmeans.mexw64':