首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到mlpack稀疏编码解决方案

找不到mlpack稀疏编码解决方案
EN

Stack Overflow用户
提问于 2014-07-03 02:23:55
回答 1查看 266关注 0票数 1

我正在努力学习如何在mlpack库中使用稀疏编码算法。当我在我的mlpack::sparse_coding:SparseCoding实例上调用Encode()时,我得到了错误

代码语言:javascript
复制
[WARN] There are 63 inactive atoms. They will be reinitialized randomly. 
error: solve(): solution not found

简单地说,该算法无法学习数据的潜在表示。或者这是我的习惯?相关部分后面是编辑:一行被修改以修复不相关的错误,但原始错误仍然存在。

代码语言:javascript
复制
double* Application::GetSparseCodes(arma::mat* trainingExample, int atomCount)
{
    double* latentRep = new double[atomCount];
    mlpack::sparse_coding::SparseCoding<mlpack::sparse_coding::DataDependentRandomInitializer> sc(*trainingExample, Utils::ATOM_COUNT, 1.0);
    sc.Encode(Utils::MAX_ITERATIONS);
    arma::mat& latentRepMat = sc.Codes();
    for (int i = 0; i < atomCount; i++)
        latentRep[i] = latentRepMat.at(i, 0);
    return latentRep;
}

相关参数

代码语言:javascript
复制
const static int IMAGE_WIDTH = 20;
const static int IMAGE_HEIGHT = 20;
const static int PIXEL_COUNT = IMAGE_WIDTH * IMAGE_HEIGHT;
const static int ATOM_COUNT = 64;
const static int MAX_ITERATIONS = 100000;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-15 17:29:19

这可能是少数几个问题之一,但考虑到这些问题的描述,很难判断是哪一个(或者如果它完全是其他的东西)。然而,这三种想法应该是一个很好的起点:

  • mlpack中的矩阵是列主的。这意味着每个观察应该代表一列。如果您使用mlpack::data::Load()来加载,例如一个CSV文件(通常每观察一行),它将自动转换数据集。如果您将转换后的数据传递给SparseCoding,那么它的行为会很奇怪。另见http://www.mlpack.org/doxygen.php?doc=matrices.html
  • 如果有63个不活跃的原子,那么实际上只有一个原子是活性的(假设ATOM_COUNT是64)。这意味着算法已经发现表示字典的最佳方法(在给定的步骤)只使用一个原子。如果要传递的矩阵由所有零组成,则可能发生这种情况。
  • mlpack将提供详细的输出,这也可能有助于调试。通常使用mlpack的CLI类来解析命令行输入,但是可以使用mlpack::Log::Info.ignoreInput = false启用详细的输出。你可以通过这种方式获得大量的输出,但是它会让你更好地了解正在发生的事情。

顺便说一句,mlpack项目有自己的邮件列表,您可能会得到更快或更全面的响应。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24543984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档