【问题标题】:Trouble understanding datasets in the Tensorflow RNN Tutorial在 Tensorflow RNN 教程中无法理解数据集
【发布时间】:2017-02-22 20:13:26
【问题描述】:

好吧,我承认 - 这是一个糟糕的问题。您可能应该对其投反对票;)但是,由于我真的需要一些见解,因此请您耐心等待,直到某个善良的灵魂首先回答它……

我已经成功安装并运行了 RNN 教程。我对此是个菜鸟——尽管我对代码有很好的感觉。不幸的是,the TensorFlow RNN tutorial 没有定义(至少对我而言)需要理解的一些关键项目:

  1. 训练集和验证集之间的逻辑区别是什么?具体来说,就'ptb.train.txt'和'ptb.valid.txt'中的文件内容而言

    例如,ptb.train.txt 包含:

    there is no asbestos in our products now 
    

    但是,asbestosin our products 都没有出现在 ptb.valid.txt 中,因此不清楚正在训练什么以及正在验证什么。

  2. 我的“测试困惑”报告为 121.236。这是什么意思?再说一次,我真的很想知道 'ptb.test.txt' 文件的内容 - 这是根据什么来衡量的?

    另一个典型例子:ptb.test.txt 包含:

    the offers were to work as a writer not an editor
    

    ptb.train.txtptb.valid.txt 文件中均未出现此“序列”或关闭子集。也许我完全不在基地,但我认为目的是匹配这样的序列。这是不正确的吗?报告的困惑与此有何关系?

  3. 最后(再次,这里是 NOOB),即使是这个简单的例子也需要相当长的时间来训练。有没有办法保存“经过训练”的系统,以便我可以针对不同的测试数据集运行它?

    更新 我相信问题 #3 是answered in this SO question

【问题讨论】:

  • 好的,否决...

标签: tensorflow recurrent-neural-network


【解决方案1】:
  1. 您需要学习一些要素才能理解该过程。机器学习算法正在给定数据集上进行训练。这些算法可能会“记住”您的整个数据集,因此它们将始终为您的数据集提供正确的答案。 正确答案是您的问题的预期结果。如果模型记住了你所有的训练数据,它就不会对没有见过的新输入数据做出很好的反应,所以他的预测能力不会很好。为了训练模型以获得更好的预测能力,您将数据集拆分为 trainvalidation,其中验证子集不用于训练,而是用于控制模型没有记住 train 数据集。

  2. 困惑度是评估模型好坏的特定指标

  3. 是的,您可以查阅文档:https://www.tensorflow.org/programmers_guide/variables

【讨论】:

  • 我试图用更多关于我不明白的细节来补充这个问题。从您的回答中,我看到我的问题确实没有达到目标。鉴于文件的内容,我没有“看到”序列是如何被验证或测试的,也没有看到与此相关的困惑。
【解决方案2】:
  • 训练集用于优化模型。
  • 验证数据集用于检查模型是否欠拟合过拟合训练数据。
  • 在您训练了模型并感觉它表现良好后,您可以使用 测试数据集 来检查 根据来自您的验证数据集,并导致您的模型过度拟合现实世界的数据。

另外,这些问题属于https://stats.stackexchange.com/ :)

【讨论】: