当前位置: 首页 > article >正文

【NLP 24、实践 ⑤ 计算Bert模型中的参数数量】

以前不甘心,总想争个对错,现在不会了

人心各有所愿,没有道理可讲

                                                        —— 25.1.18

计算Bert模型结构中的参数数量 

BertModel.from_pretrained():用于从预训练模型目录或 Hugging Face 模型库加载 BERT 模型的权重及配置。

参数名称类型是否必填说明
pretrained_model_name_or_path字符串模型名称(如 bert-base-uncased)或本地路径。
configBertConfig对象自定义配置类,用于覆盖默认配置。
state_dict字典预训练权重字典,用于部分加载模型。
cache_dir字符串缓存目录,用于存储下载的模型文件。
from_tf布尔值是否从 TensorFlow 模型加载权重,默认为 False
ignore_mismatched_sizes布尔值是否忽略权重大小不匹配的错误,默认为 False
local_files_only布尔值是否仅从本地文件加载模型,默认为 False

return_dict参数:

  • 当 return_dict 设置为 True 时,forward() 方法返回一个 BaseModelOutput 对象,该对象包含了模型的各种输出,如最后一层的隐藏状态、[CLS] 标记的输出等。
  • 当 return_dict 设置为 False 时,forward() 方法返回一个元组,包含与 BaseModelOutput 对象相同的元素,但不包含对象结构。

numel():计算张量(Tensor)中的元素总数

参数名称类型是否必填说明
tensortorch.Tensor输入的PyTorch张量。

parameters():返回模型中所有可训练参数的迭代器。

参数名称类型是否必填说明
recurse布尔值是否递归获取子模块的参数,默认为True
import torch
import math
import torch.nn as nn
import numpy as np
from transformers import BertModel

model = BertModel.from_pretrained("F:\人工智能NLP\\NLP资料\week6 语言模型//bert-base-chinese", return_dict=False)
n = 2                       # 输入最大句子个数
vocab = 21128               # 词表数目
max_sequence_length = 512   # 最大句子长度
embedding_size = 768        # embedding维度
hide_size = 3072            # 隐藏层维数
num_layers = 1              # 隐藏层层数

# embedding过程中的参数,其中 vocab * embedding_size是词表embedding参数, max_sequence_length * embedding_size是位置参数, n * embedding_size是句子参数
# embedding_size + embedding_sizes是layer_norm层参数
embedding_parameters = vocab * embedding_size + max_sequence_length * embedding_size + n * embedding_size + embedding_size + embedding_size

# self_attention过程的参数, 其中embedding_size * embedding_size是权重参数,embedding_size是bias, *3是K Q V三个
self_attention_parameters = (embedding_size * embedding_size + embedding_size) * 3

# self_attention_out参数 其中 embedding_size * embedding_size + embedding_size + embedding_size是self输出的线性层参数,embedding_size + embedding_size是layer_norm层参数
self_attention_out_parameters = embedding_size * embedding_size + embedding_size + embedding_size + embedding_size

# Feed Forward参数 其中embedding_size * hide_size + hide_size第一个线性层,embedding_size * hide_size + embedding_size第二个线性层,
# embedding_size + embedding_size是layer_norm层
feed_forward_parameters = embedding_size * hide_size + hide_size + embedding_size * hide_size + embedding_size + embedding_size + embedding_size

# pool_fc层参数
pool_fc_parameters = embedding_size * embedding_size + embedding_size

# 模型总参数 = embedding层参数 + self_attention参数 + self_attention_out参数 + Feed_Forward参数 + pool_fc层参数
all_paramerters = embedding_parameters + (self_attention_parameters + self_attention_out_parameters + \
    feed_forward_parameters) * num_layers + pool_fc_parameters
print("模型实际参数个数为%d" % sum(p.numel() for p in model.parameters()))
print("diy计算参数个数为%d" % all_paramerters)


http://www.kler.cn/a/560157.html

相关文章:

  • 2024年国赛高教杯数学建模D题反潜航空深弹命中概率问题解题全过程文档及程序
  • 网络安全产品
  • 数据安全_笔记系列02:国密算法(商用密码算法)详解
  • 测试工程师玩转DeepSeek之Prompt
  • 为什么java从json中获取值有数据类型,而从xml中获取值没有数据类型?
  • vue3学习4-pinia+组件通信
  • python与C系列语言的差异总结(2)
  • Apache Doris:一款高性能的实时数据仓库
  • 分班问题幼儿园分班
  • 基于 SpringBoot 的 “电影交流平台小程序” 系统的设计与实现
  • 学习笔记04——JMM内存模型
  • zookeeper的可视化界面
  • 搜广推校招面经二十八
  • 【Docker】如何在Linux、Windows、MacOS中安装Docker
  • 包装类缓存对象
  • Excel带日期画折线图教程
  • 【量化策略】动量反转策略
  • ubuntu 20.04系统离线安装nfs
  • 【JavaScript】什么是JavaScript?以及常见的概念
  • YaRN论文解读