from mxnet import autograd, gluon, init, np, npx
from d2l import mxnet as d2l
npx.set_np()
首先,我们加载WikiText-2数据集作为小批量的预训练样本,用于遮蔽语言模型和下一句预测。批量大小是512,BERT输入序列的最大长度是64。注意,在原始BERT模型中,最大长度是512。
batch_size, max_len = 512, 64
train_iter, vocab = d2l.load_data_wiki(batch_size, max_len)
![](https://img-blog.csdnimg.cn/img_convert/eb2fb157b1a9d8ebe5cc529409017926.png)
预训练BERT
原始BERT有两个不同模型尺寸的版本。基本模型(BERT)使用12层(Transformer编码器块),768个隐藏单元(隐藏大小)和12个自注意头。大模型(BERT)使用24层,1024个隐藏单元和16个自注意头。值得注意的是,前者有1.1亿个参数,后者有3.4亿个参数。为了便于演示,我们定义了一个小的BERT,使用了2层、128个隐藏单元和2个自注意头。
net = d2l.BERTModel(len(vocab), num_hiddens=128, ffn_num_hiddens=256,
num_heads=2, num_layers=2, dropout=0.2)
devices = d2l.try_all_gpus()
net.initialize(init.Xavier(), ctx=devices)
loss = gluon.loss.SoftmaxCELoss()
在定义训练代码