BertModel的架构:
以bert-base-chinese为例:
model = BertModel.from_pretrained("../model/bert-base-chinese")
统计模型参数:
# 参数量的统计
total_params = 0 # 模型总的参数量
total_learnable_params = 0 # 可学习的参数量
total_embedding_params = 0 # embeddings 层的参数量
total_encoder_params = 0 # Encoder编码器部分的参数量
total_pooler_params = 0
for name , param in model.named_parameters():
print(name , "->" , param.shape)
if param.requires_grad:
total_learnable_params += param.numel()
if "embedding" in name :
total_embedding_params += param.numel()
if "encoder" in name :
total_encoder_params += param.numel()
if "pooler" in name :
total_pooler_params += param.numel()
total_params += param.numel()
从上面可以看出:
embedding层占比 0.16254008305735163
Encoder编码器部分占比 0.8316849528014959
pooler层占比 0.005774964141152439
总共的参数:102267648
返回值分析:
关于BertModel的文档如下:
BERTWe’re on a journey to advance and democratize artificial intelligence through open source and open science.https://huggingface.co/docs/transformers/main/en/model_doc/bert#transformers.BertModel这里进步详细解释一下:
last_hidden_state 、 pooler_output 必定会返回的,而hidden_state是在model设置output_hidden_states=True
或者config.output_hidden_states=True的时候进行返回的。
这里说明一下:
outputs的长度为3:
# outputs[0] == last_hidden_state : (batch_size, sequence_length, hidden_size)
# outputs[1] == pooler_output : (batch_size, hidden_size)
# outputs[2] == hidden_state : (batch_size, sequence_length, hidden_size)
从上图中可以看出:文章来源:https://www.toymoban.com/news/detail-622132.html
model.embeddings(input_tensor) == outputs[2][0]文章来源地址https://www.toymoban.com/news/detail-622132.html
到了这里,关于transformers里的BertModel之架构和参数统计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!