transformers(懒的打这么长了,以后简称tmrs) 的 TFBertForSequenceClassification

首先说一下,batch_encode_plus的速度感觉并没有比encode_plus快多少,下图的速度是 batch_encode_plus(没有转ndarry)和 encode_plus (转了ndarry)的速度,可以说没什么区别。

并且batch_encode_plus,它是一批次一批次的做的,会把所有的input_ids、mask、attention等全封装在BatchEncoding中,而如果使用encode_plus,则可以分开,方便以后使用。

顺便一说,发现了tmrs的自带训练器,不过有点迷惑的是,tmrs for TensorFlow的 TFTrainer,竟然必须依赖torch,挺迷惑的,而且数据只支持Dataset,感觉这种数据不是很好转换成Dataset,于是就暂时没用。

源码

在最开始的BertModel就介绍过了,顺带一提,虽然BertModel里写的分类模型和 TFBertForSequenceClassification 代码都一样,但是还是发现了封装的坏处,就是 TFBertForSequenceClassification 的Training方法,只能同时对bert和dropout的训练状态进行控制,而不能分段控制,比如如果对bert进行训练,那么下降的相对就比较慢。

同时还发现了一个问题 ,使用 TFBertForSequenceClassification 的下降速率更慢一点(同意的全train的情况下),我也不太清楚是什么的原因,毕竟两边的源码几乎一样,只有dense层参数初始化有一些变化。

完整源码


0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注