Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tplinker训练acc上不去 #24

Closed
enbacoo opened this issue Mar 15, 2021 · 14 comments
Closed

tplinker训练acc上不去 #24

enbacoo opened this issue Mar 15, 2021 · 14 comments

Comments

@enbacoo
Copy link

enbacoo commented Mar 15, 2021

想问下有训练log参考下吗?nyt数据集用tplinker训练了100个epoch,实体准确率很高,但t_head_rel_sample_acc, t_tail_rel_sample_acc始终上不去。大约多少个epoch能看到显著变化呢?另外tplinker-plus训练过程中看不到t_head_rel_sample_acc了吗?只有一个t_sample_acc

@minfei1998
Copy link

你是采用GPU还是CPU?我使用nyt数据集用tplinker训练了20多轮就能达到97%左右,但f值是90%左右。如果你使用CPU,你确认 是epoch而不是batch,因为CPU训练一个epoch都很慢。

@enbacoo
Copy link
Author

enbacoo commented Mar 16, 2021

你是采用GPU还是CPU?我使用nyt数据集用tplinker训练了20多轮就能达到97%左右,但f值是90%左右。如果你使用CPU,你确认 是epoch而不是batch,因为CPU训练一个epoch都很慢。

用的是gpu,您的训练参数和训练日志能发给我一份参考么?可以的话发我邮箱enbacoo@126.com,谢谢~

@131250208
Copy link
Owner

@enbacoo nyt的话一般10个epoch以后f1就上90了,你可以看看是不是学习率的问题,建议按readme里提供的参数进行设置。tplinker_plus的实体和关系都标在一个矩阵里,进行的是多分类,所以只有一个t_sample_acc。

@enbacoo
Copy link
Author

enbacoo commented Mar 16, 2021

@enbacoo nyt的话一般10个epoch以后f1就上90了,你可以看看是不是学习率的问题,建议按readme里提供的参数进行设置。tplinker_plus的实体和关系都标在一个矩阵里,进行的是多分类,所以只有一个t_sample_acc。

这边是训练参数
{
"shaking_type": "cat",
"inner_enc_type": "lstm",
"dist_emb_size": -1,
"ent_add_dist": false,
"rel_add_dist": false,
"match_pattern": "whole_text",
"lr": 5e-05,
"batch_size": 64,
"epochs": 80,
"seed": 2333,
"log_interval": 10,
"max_seq_len": 100,
"sliding_len": 20,
"loss_weight_recover_steps": 12000,
"scheduler": "CAWR",
"T_mult": 1,
"rewarm_epoch_num": 2
}
下面这段是训练log,我尝试好几次,train_ent_seq_acc明显会上升,但是train_head_rel_acc和f1始终上不去,有没有训练的log能给我对比下呢?
run_id: OiXGAy9c, {'train_loss': 0.0031963376116447067, 'train_ent_seq_acc': 0.08034419604901517, 'train_head_rel_acc': 0.005021067415730337, 'train_tail_rel_acc': 0.0050561797752808986, 'learning_rate': 2.5e-05, 'time': 2343.7212665081024}
run_id: OiXGAy9c, {'val_ent_seq_acc': 0.46920072138309477, 'val_head_rel_acc': 0.0048828125, 'val_tail_rel_acc': 0.0048828125, 'val_prec': 0.0, 'val_recall': 0.0, 'val_f1': 0.0, 'time': 54.94208812713623}
run_id: OiXGAy9c, {'train_loss': 0.0005097332748642003, 'train_ent_seq_acc': 0.43786156244492264, 'train_head_rel_acc': 0.005161516853932584, 'train_tail_rel_acc': 0.005161516853932584, 'learning_rate': 5e-05, 'time': 2345.5391070842743}
run_id: OiXGAy9c, {'val_ent_seq_acc': 0.5945913463830947, 'val_head_rel_acc': 0.0048828125, 'val_tail_rel_acc': 0.0048828125, 'val_prec': 0.0, 'val_recall': 0.0, 'val_f1': 0.0, 'time': 54.83455538749695}
run_id: OiXGAy9c, {'train_loss': 0.00032027174440393054, 'train_ent_seq_acc': 0.6155144435636113, 'train_head_rel_acc': 0.005161516853932584, 'train_tail_rel_acc': 0.005161516853932584, 'learning_rate': 2.5e-05, 'time': 2343.1872129440308}
run_id: OiXGAy9c, {'val_ent_seq_acc': 0.7178936298936606, 'val_head_rel_acc': 0.0048828125, 'val_tail_rel_acc': 0.0048828125, 'val_prec': 0.0, 'val_recall': 0.0, 'val_f1': 0.0, 'time': 55.20200228691101}
run_id: OiXGAy9c, {'train_loss': 0.00020866187181771116, 'train_ent_seq_acc': 0.7218441580788473, 'train_head_rel_acc': 0.005161516853932584, 'train_tail_rel_acc': 0.005231741573033708, 'learning_rate': 5e-05, 'time': 2344.8456263542175}
run_id: OiXGAy9c, {'val_ent_seq_acc': 0.7404597356915474, 'val_head_rel_acc': 0.0048828125, 'val_tail_rel_acc': 0.00546875, 'val_prec': 0.0, 'val_recall': 0.0, 'val_f1': 0.0, 'time': 55.25414180755615}

@131250208
Copy link
Owner

@enbacoo batch_size设太大了,收敛慢是正常的,而且你设大了batch_size没有修改loss_weight_recover_steps,这个参数会让模型在前12000步主要关注entity的训练,在12000内逐渐恢复平衡的权重,rel才能逐渐得到训练。要么把batch_size改回24,要么把loss_weight_recover_steps设置小一点,至于设成多少,需要你自己去试了。你也可以直接设成0,这个参数只影响收敛速度。

@131250208
Copy link
Owner

@enbacoo 这是batch_size=24的log
image
第三轮即有显著变化
image
第十轮就上90了

@enbacoo
Copy link
Author

enbacoo commented Mar 17, 2021

@enbacoo 这是batch_size=24的log
image
第三轮即有显著变化
image
第十轮就上90了

嗯嗯,多谢,调整了参数的确收敛了。想问下您试过单机多卡跑么?有的话可以推荐下参数么?

@131250208
Copy link
Owner

@enbacoo 这个可能需要你自行尝试了,我没试过。

@enbacoo
Copy link
Author

enbacoo commented Mar 17, 2021

@enbacoo 这个可能需要你自行尝试了,我没试过。

好的~多谢多谢

@jarork
Copy link

jarork commented Apr 14, 2021

@enbacoo batch_size设太大了,收敛慢是正常的,而且你设大了batch_size没有修改loss_weight_recover_steps,这个参数会让模型在前12000步主要关注entity的训练,在12000内逐渐恢复平衡的权重,rel才能逐渐得到训练。要么把batch_size改回24,要么把loss_weight_recover_steps设置小一点,至于设成多少,需要你自己去试了。你也可以直接设成0,这个参数只影响收敛速度。

请问TPLinker Plus有没有内含loss_weight_recover_steps这个机制呢?谢谢

@131250208
Copy link
Owner

@jarork 没有

@LimKim
Copy link

LimKim commented Sep 3, 2021

@enbacoo batch_size设太大了,收敛慢是正常的,而且你设大了batch_size没有修改loss_weight_recover_steps,这个参数会让模型在前12000步主要关注entity的训练,在12000内逐渐恢复平衡的权重,rel才能逐渐得到训练。要么把batch_size改回24,要么把loss_weight_recover_steps设置小一点,至于设成多少,需要你自己去试了。你也可以直接设成0,这个参数只影响收敛速度。

大佬你好,想问一下为什么这个模型对batchsize这么敏感?

@131250208
Copy link
Owner

@LimKim 所有模型增大batch size收敛都会变慢,这个模型序列长是N^2,比较稀疏,收敛本身就很慢。

@LimKim
Copy link

LimKim commented Sep 6, 2021

@LimKim 所有模型增大batch size收敛都会变慢,这个模型序列长是N^2,比较稀疏,收敛本身就很慢。

那想问一下大佬该如何加快模型训练速度?
我单机单卡速度训练有点慢,用了多机多卡训练,batchsize扩大4倍后,跑了3天都不收敛。
如果不能通过扩大batchsize的方式加速的话,还有其他的方法吗

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants