python - DREAM - 神经网络不收敛 - 上下损失
问题描述
我正在使用这个 DREAM 进行下一个篮子预测: https ://github.com/LaceyChen17/DREAM
它非常简单直接,运行一些调整(常量的小错误)但我的损失在我尝试训练它之后很疯狂。
我正在尝试使用建议的数据集(来自 instacart)来模拟其输出: https ://www.instacart.com/datasets/grocery-shopping-2017
但数据似乎并没有收敛。我试图将 LR 从 0.1 更改为 0.001,调整 CLIP 或 dropout,但没有任何积极的结果。我的损失不断下降,然后像疯了一样再次上升。
我试图研究这个网络,在我第一次运行它之后,我想从那里开始工作,但现在我似乎无法调试它的问题。
这是我的配置示例:
DREAM_CONFIG = {'basket_pool_type': 'max', # 'avg'
'rnn_layers': 3, # 2, 3
'rnn_type': 'LSTM',#'RNN_TANH',#'GRU',#'LSTM',# 'RNN_RELU',
'dropout': 0.5,
# 'num_product': 49688 + 1, # padding idx = 0
'num_product': 49688 + 1 + 1,
# 49688 products, padding idx = 0, none idx = 49689, none idx indicates no products
'none_idx': 49689,
'embedding_dim': 64, # 128
'cuda': False, # True,
'clip': 20, # 0.25
'epochs': 100,
'batch_size': 256,
'learning_rate': 0.0001, # 0.0001
'log_interval': 1, # num of batchs between two logging
'checkpoint_dir': DREAM_MODEL_DIR + 'reorder-next-dream-{epoch:02d}-{loss:.4f}.model',
}
有什么见解吗?
解决方案
可能还有其他的方法可以尝试提高训练的性能,但是,我至少建议使用“ModelCheckpoint”类来保存最佳验证权重。
如果您使用的是 Keras,那么您可以参考此链接以获取更多信息。
您需要将一些训练数据分配给验证集。此回调计算验证集的损失并在每次改进时保存权重。训练后,您可以加载最佳权重以防止模型过度拟合。这至少可以防止您的模型在训练过程中变得更糟,并且您可以从那里通过进行额外的调整来排除故障。
推荐阅读
- sql - 根据假设值选择最大值
- regex - 常规正则表达式在 Bitbucket 客户端挂钩中未按预期工作
- rsyslog - 如何更改新的 rsyslog 配置文件中的 MARK 周期?
- python - 比较像'1,2,3'和'3,1,2'这样的字符串在Python中设置为相等
- jupyter-notebook - Pythreejs 纹理 UV 映射
- sql - 从数据库中选择记录,日期为“As-On”,已过日期?
- java - 如何在java中为未知数量的参数编写构造函数?
- sql - 如果至少存在一个字符,如何将状态更新为错误的数字?
- r - 堆积条形图:y轴得到
- r - 如何根据 R 中特定列给出的子组创建新的数据框提取方法