【问题标题】:Learning curves for neural networks神经网络的学习曲线
【发布时间】:2019-04-10 08:40:41
【问题描述】:

我试图找到在 octave 上实现的神经网络模型的最佳参数,该模型用于二进制分类和 122 个特征(输入)和 25 个隐藏单元(1 个隐藏层)。为此,我有 4 个矩阵/向量:

size(X_Train): 125973 x 122
size(Y_Train): 125973 x 1
size(X_Test): 22543 x 122
size(Y_test): 22543 x 1

我已经使用了 20% 的训练集来生成验证集(XValYVal

size(X): 100778 x 122
size(Y): 100778 x 1
size(XVal): 25195 x 122
size(YVal): 25195 x 1
size(X_Test): 22543 x 122
size(Y_test): 22543 x 1

目标是生成 NN 的学习曲线。我了解到(困难的方式 xD)这是非常耗时,因为我为此使用了 XvalX 的完整大小。

我不知道是否有替代解决方案。我正在考虑减小训练向量 X 的大小(例如 5000 个样本),但我不知道我是否可以这样做,或者结果是否会有偏差,因为我只会使用一部分训练集?

最佳,

【问题讨论】:

  • Y_test 的大小应为 22543 x 1。
  • 感谢您注意到这一点,我进行了更正。

标签: matlab machine-learning neural-network octave


【解决方案1】:

上面的参数总数在 3k 左右(122*25 + 25*1),举个例子来说不算大。由于示例数量很大,您可能希望使用随机梯度下降或小批量而不是梯度下降。

请注意,Matlab 和 Octave 通常很慢,尤其是循环。 您需要编写使用矩阵运算而不是循环的代码,以便在 Matlab/Octave 中管理速度。

【讨论】:

  • 我正在使用 fmincg 函数,它使用梯度共轭方法,它的内存效率更高(我想我会阅读有关小批量梯度下降的信息,看看我是否可以实现它)另外,我同意和你谈谈你所说的循环。但我已经将我的代码矢量化了。
  • 另外你觉得我使用的隐藏单元的数量如何?很多吗?
  • 您可以尝试使用较小的数字,例如 3 或 5,但 25 似乎并不是很大。
  • 我的意思是,很难知道该选择什么。我做了一些研究,发现了一些有助于隐藏单元数量的公式,例如(H = input * 70% or H= input * 90% or H= (input + output) /2)。但我有 122 个输入!如果我使用其中任何一个,我将得到非常大的隐藏单元。这就是为什么我决定从 25 开始。但我会按照你的建议尝试更小的数字!
猜你喜欢
  • 2016-07-11
  • 1970-01-01
  • 2016-05-25
  • 2019-03-15
  • 2011-08-17
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多