可以只使用一个纪元吗?

Rei*_*ica 5 machine-learning neural-network tensorflow

我正在TensorFlow中(使用tflearn)训练生成的数据的神经网络。据我所知,每个时期我们都使用所有训练数据。由于我可以控制我拥有的示例数量,因此似乎最好只生成更多的训练数据,直到一个纪元足以训练网络为止。

所以我的问题是:假设我有足够的训练数据,仅使用一个纪元会有任何弊端吗?我假设一百万个示例中的一个纪元比十万个示例中的十个纪元好吗?

Oli*_*rot 6

与@Prune讨论之后:

假设您有可能生成无限数量的带标签的示例,这些示例是从固定的基础概率分布(即从同一流形)中采样的。

网络看到的示例越多,它就会学得越好,尤其是它能更好地推广。理想情况下,如果您对它进行足够长的培训,则可以在此特定任务上达到100%的准确性。


结论是,只要示例是从同一分布中采样的,则只运行1个历元就可以了。

该策略的局限性可能是:

  • 如果您需要存储生成的示例,则可能内存不足
  • 要处理不平衡的类(请参阅@jorgemf答案),您只需为每个类采样相同数量的示例。
    • 例如,如果您有两个类别,并且第一个样本有10%的机会采样,则应创建具有50%/ 50%分布的示例批次

运行多个时期可能会使它更好地学习一些不常见的情况。

我不同意,多次使用同一示例总是比生成新的未知示例更糟糕。但是,您可能想随时间生成越来越难的示例,以使您的网络在不常见的情况下变得更好。


jor*_*emf 5

您需要训练示例才能使网络学习。通常你没有那么多的例子来使网络收敛,所以你需要运行多个 epoch。

如果你有很多例子并且它们很相似,那么只使用一个纪元是可以的。如果你有 100 个类,但其中一些只有很少的示例,那么你不会只用一个 epoch 来学习这些类。所以你需要平衡的课程。

此外,最好有一个可变的学习率,该学习率随着示例数量的增加而降低,这样网络就可以自我微调。它从高学习率开始,然后随着时间的推移而降低,如果你只运行一个时期,你需要记住这一点来调整图表。

我的建议是运行多个 epoch,主要是因为示例越多,存储它们所需的内存就越多。但是,如果内存很好并且学习率是根据示例数量而不是纪元来调整的,那么运行一个纪元就可以了。

编辑:我假设您正在使用一种学习算法,该算法会每批次或类似情况更新网络的权重。