- 微调模型的作用:
- 微调模型一般用在迁移学习中的预训练模型之后, 因为单纯的预训练模型往往不能针对特定领域或任务获得预期结果, 需要通过微调模型在特定领域或任务上调节整体模型功能, 使其适应当下问题.
- 构建全连接微调模型的代码分析:
import torchimport torch.nn as nnimport torch.nn.functional as Fclass Net(nn.Module):"""定义微调网络的类"""def __init__(self, char_size=20, embedding_size=768, dropout=0.2):""":param char_size: 输入句子中的字符数量, 因为规范后每条句子长度是max_len, 因此char_size为2*max_len:param embedding_size: 字嵌入的维度, 因为使用的bert中文模型嵌入维度是768, 因此embedding_size为768:param dropout: 为了防止过拟合, 网络中将引入Dropout层, dropout为置0比率, 默认是0.2"""super(Net, self).__init__()# 将char_size和embedding_size传入其中self.char_size = char_sizeself.embedding_size = embedding_size# 实例化化必要的层和层参数:# 实例化Dropout层self.dropout = nn.Dropout(p=dropout)# 实例化第一个全连接层self.fc1 = nn.Linear(char_size*embedding_size, 8)# 实例化第二个全连接层self.fc2 = nn.Linear(8, 2)def forward(self, x):# 对输入的张量形状进行变换, 以满足接下来层的输入要求x = x.view(-1, self.char_size*self.embedding_size)# 使用dropout层x = self.dropout(x)# 使用第一个全连接层并使用relu函数x = F.relu(self.fc1(x))# 使用dropout层x = self.dropout(x)# 使用第二个全连接层并使用relu函数x = F.relu(self.fc2(x))return x
- 代码位置: /data/doctor_online/bert_serve/finetuning_net.py
- 实例化参数:
embedding_size = 768char_size = 20dropout = 0.2
- 输入参数:
x = torch.randn(1, 20, 768)
调用:
net = Net(char_size, embedding_size, dropout)nr = net(x)print(nr)
输出效果:
tensor([[0.0000, 0.4061]], grad_fn=<ReluBackward0>)
- 小节总结:
- 学习了微调模型的作用:
- 微调模型一般用在迁移学习中的预训练模型之后, 因为单纯的预训练模型往往不能针对特定领域或任务获得预期结果, 需要通过微调模型在特定领域或任务上调节整体模型功能, 使其适应当下问题.
- 学习了微调模型的作用:
- 学习并实现了构建全连接微调模型的类: class Net(nn.Module)
