我想这里发生的事情是你试图根据一些经验法则分配超参数值,这对于第一种情况是有效的,但对于第二种情况却没有.
1)您正在查看的误差估计是训练集的乐观预测误差估计.在实际的预测误差为高,但因为你没有测试您的看不见的数据模型有没有知道它的方式.统计学习的要素很好地描述了这种现象.我强烈推荐这本书.您可以免费在线获取.
2)要获得预测误差较小的估算器,您需要执行超参数调整.例如,隐藏节点的数量,学习速率和动量应该在不可见的数据上进行变化和测试,以便知道哪个组合导致最低的预测误差.scikit-learn已经GridSearchCV
并且RandomizedSearchCV
做到了这一点,但它们只适用于sklearn的估算器.您可以滚动自己的估算器,这在文档中有描述.就个人而言,我认为模型选择和模型评估是两个不同的任务.对于第一个,您可以运行单个GridSearchCV或RandomizedSearchCV,并为您的任务获取一组最佳超参数.对于模型评估,如果需要更准确的估计,则需要运行更复杂的分析,例如嵌套交叉验证或甚至重复嵌套交叉验证.
3)我对LSTM网络知之甚少,但我看到在第一个例子中你分配了25个隐藏节点,但是对于LSTM你只提供了5个.也许这还不足以学习模式.您也可以像示例中所做的那样降低输出偏差.
PS我认为这个问题实际上属于http://stats.stackexchange.com,在那里你可能会得到更详细的问题答案.
编辑:我刚刚注意到你正在教授1000万个时代的模型!我认为这很多,可能是过度拟合问题的一部分.我认为实现早期停止是一个好主意,即如果实现某些预定义错误则停止训练.
我想这里发生的事情是你试图根据一些经验法则分配超参数值,这对于第一种情况是有效的,但对于第二种情况却没有.
1)您正在查看的误差估计是训练集的乐观预测误差估计.在实际的预测误差为高,但因为你没有测试您的看不见的数据模型有没有知道它的方式.统计学习的要素很好地描述了这种现象.我强烈推荐这本书.您可以免费在线获取.
2)要获得预测误差较小的估算器,您需要执行超参数调整.例如,隐藏节点的数量,学习速率和动量应该在不可见的数据上进行变化和测试,以便知道哪个组合导致最低的预测误差.scikit-learn已经GridSearchCV
并且RandomizedSearchCV
做到了这一点,但它们只适用于sklearn的估算器.您可以滚动自己的估算器,这在文档中有描述.就个人而言,我认为模型选择和模型评估是两个不同的任务.对于第一个,您可以运行单个GridSearchCV或RandomizedSearchCV,并为您的任务获取一组最佳超参数.对于模型评估,如果需要更准确的估计,则需要运行更复杂的分析,例如嵌套交叉验证或甚至重复嵌套交叉验证.
3)我对LSTM网络知之甚少,但我看到在第一个例子中你分配了25个隐藏节点,但是对于LSTM你只提供了5个.也许这还不足以学习模式.您也可以像示例中所做的那样降低输出偏差.
PS我认为这个问题实际上属于http://stats.stackexchange.com,在那里你可能会得到更详细的问题答案.
编辑:我刚刚注意到你正在教授1000万个时代的模型!我认为这很多,可能是过度拟合问题的一部分.我认为实现早期停止是一个好主意,即如果实现某些预定义错误则停止训练.