Datawhale AI夏令营第三期·AI+化学task2:RNN建模SMILES进行反应产率预测

一、跑通baseline

1.过拟合,预测的结果都一样

训练了三次,发现结果都一样,提交上去测评结果也是负数。我改的有epoch、num_layers,但是都不起作用。

图1:错误示例

后来尝试了多次调参,无功而返,后来和群内网友交流发现,DROPOUT修改一下会有效果,由于默认值是0.2,过小了。后面调大这个值之后,发现结果正常了,不再是负值了。

2.DROPOUT的含义

DROPOUT 是一种正则化技术,用于防止神经网络的过拟合。它的主要思想是在每个训练阶段随机地忽略(丢弃)一些神经元,并且在每次前向传播中以一定概率将其设为零。这有助于网络学习到更鲁棒的特征,因为它不能依赖于某些特定的神经元或路径。

简而言之,防止过拟合

因此,在调大之后,评测结果就好很多了。

二、我的参数

N = 10  #int / int(len(dataset) * 1)
NUM_EMBED = 293 # nn.Embedding()
INPUT_SIZE = 300 # src length
HIDDEN_SIZE = 256
OUTPUT_SIZE = 128
NUM_LAYERS = 3
DROPOUT = 0.5
CLIP = 1 # CLIP value
N_EPOCHS = 100
LR = 0.001

代码中做了以下修改来减少过拟合:

模型复杂度

  1. 降低隐藏层维度:将隐藏层的维度从 512 减少到 256。
  2. 降低输出维度:将输出维度从 512 减少到 128。
  3. 减少 RNN 层数:将 RNN 层数从 10 减少到 3。

正则化

  1. 增加 Dropout 概率:将 Dropout 概率从 0.2 增加到 0.5。

好处是提高了模型的训练速度,100轮也才8分钟左右。

!!!另外,默认代码似乎有一个错误,就是NUM_EMBED

NUM_EMBED是词嵌入矩阵的大小,即词汇表中不重复词的总数。它的值应该等于词汇表的长度,即所有可能的符号数量。

根据vocab_full.txt的内容长度,NUM_EMBED=293才对。

三、后续改进方案

由于提交次数有限,还有很多调参方案没有验证,比如进一步探索RNN层数,期望在训练时长和效果上取得一个平衡。


最后,感谢Datawhale提供这个学习交流机会,以及群友的帮助!!!😊😊😊

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值