下面的是具体的训练代码和小说生成代码。 1. 训练代码 训练过程会输出一个 epoch 的总损失,以及每个 epoch 结束时使用的学习率。注意,下面代码运行时,不可以将 main 函数中的代码放到单独的 train 函...
前面使用 GPT2 实现生成对联任务,这两天想用 GPT2 实现小说生成。这两个任务看似都是文本生成任务,但还是不同的。对联任务生成的内容很短小,生成小说则内容很长。从实现过程来看,虽然 GPT 可以生成长文本的内容,但...
Ignite 是一个可以帮助我们在 PyTorch 中训练和评估神经网络的高级库。简单来讲,使用该训练库可以让我们的训练代码更加简洁,灵活。工具的安装命令如下: Ignite 中主要有以下 4 个重要概念: Engine...
书接上回,上篇文章介绍了 7 种学习率的调整策略,PyTorch 1.11 版本中共有 14 种,本篇文章接着介绍剩下的 7 种学习率调整策略。 lr_scheduler.CosineAnnealingLR lr_sch...
torch.optim.lr_scheduler 提供了动态调整学习率的方法。在使用的时, Learning Rate Scheduler 一般在优化器的更新参数之后调用。另外,我们也可以在程序中使用多个 schedul...
当看到 weight decay 时,从字面意思指的是权重参数衰减,会觉得其和 L2 正则化是等价,因为 L2 正则化也能够达到权重衰减的作用,其实概念是不同的。L2 一般作为正则化项是添加到损失函数中,作为损失计算的一...
AdaGrad、RMSProp 针对学习率进行了优化,不同的参数分量在更新时能够使用各自更适合的学习率。Momentum 则是对梯度进行了优化,可以避免碰到鞍点、局部最小值时参数无法更新的情况。 我们经常把 Adam 理...
我们在使用梯度下降法时应该发现了不同参数分量在更新时使用相同的学习率。注意:不同分量使用的梯度可能是不同的。例如:我们现在有参数向量,它有 3 个分量,使用梯度下降法更新参数时都使用相同的学习率 lr。 AdaGrad ...
我们接下来编写训练函数、评估函数、预测函数。 1. 训练函数 由于我们希望批次输入训练数据,在使用 RNN、GRU、LSTM 时,可以使用 pad_sequence、packed_pad_sequence、pad_pac...
模型构建主要包括了 CRF 层的实现,以及 BiLSTM 层的实现。其中 CRF 层相对复杂一些,主要有两个较难的难点:一、要计算所有路径的损失,二、要根据发射矩阵回溯最优路径。 1. CRF 层实现 CRF 层实现时计...
数据处理主要是加在语料、构建词典、以及将数据集转换为索引表示。我们这里会删除句子长度超过 505 的句子。由于构建词典时,是根据训练集数据构建的,所以在对测试集进行编码时,可能会出现 oov 问题,我们直接用 UNK 来...
模型评估主要做的事情,提取测试集所有的实体名称,并划分为 ORG、PER、LOC 类别。分别统计每个类别的精度、召回率,以及准确率。 1. 提取实体名称 我编写了 extract_decode 函数,该函数接收一个句子,...