【问题标题】:mlpack sparse coding solution not found未找到 mlpack 稀疏编码解决方案
【发布时间】:2014-08-24 00:05:26
【问题描述】:

我正在尝试学习如何将稀疏编码算法与 mlpack 库一起使用。当我在我的 mlpack::sparse_coding:SparseCoding 实例上调用 Encode() 时,出现错误

[WARN] There are 63 inactive atoms. They will be reinitialized randomly. 
error: solve(): solution not found

仅仅是算法无法学习数据的潜在表示。或者也许这是我的用法?相关部分如下 编辑:修改了一行以修复不相关的错误,但原始错误仍然存​​在。

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;
}

一些相关参数

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;

【问题讨论】:

    标签: machine-learning neural-network autoencoder mlpack


    【解决方案1】:

    这可能是少数几个问题之一,但鉴于描述,很难判断它是其中的哪一个(或者它是否完全是其他问题)。但是,这三个想法应该是一个很好的起点:

    • 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 项目有自己的邮件列表,您可能会在其中获得更快或更全面的回复。

    【讨论】:

    • 我发现我错误地访问了犰狳矩阵,但我仍在试图弄清楚它是如何工作的。我不小心索引了垫子的地址,让我觉得我可以用“[]”运算符访问它,但我不能。你知道如何访问犰狳垫中的元素吗?文档似乎没有提到它。
    • 是的;不过,文档可以比我更好地解释它:arma.sourceforge.net/docs.html#element_access 希望这会有所帮助。
    • 使用列停止了“未找到解决方案”错误,但现在看来稀疏编码需要很长时间才能找到潜在表示。但是,这应该是另一个问题的主题。
    猜你喜欢
    • 2020-10-12
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2019-02-15
    相关资源
    最近更新 更多