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

【Python】科研代码学习:六 ModelOutput,SpecificModel

【Python】科研代码学习:六 ModelOutput,SpecificModel

  • Model Outputs
    • ModelOutput
    • BaseModelOutput
    • CausalLMOutput
    • 其他 ModelOutput
  • SpecificModel

Model Outputs

ModelOutput

  • HF官网API:ModelOutput
    所有模型的输出都是 ModelOutput 的子类的实例
    (All models have outputs that are instances of subclasses of ModelOutput)
    了解 ModelOutput与其子类,我们就可以获得许多有用的输出参数
  • 先来看如何获取模型的输出的一个例子:
    我们加载 tokenizer, model,获取输入和标签后,model(xxx) 的返回结果就是 outputs
from transformers import BertTokenizer, BertForSequenceClassification
import torchtokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-uncased")
model = BertForSequenceClassification.from_pretrained("google-bert/bert-base-uncased")inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
labels = torch.tensor([1]).unsqueeze(0)  # Batch size 1
outputs = model(**inputs, labels=labels)
  • 看一下源码:
    首先,它头文件在 transformers.utils.ModelOutput
    其次,它继承自 OrderedDict,且重载了 __getitem__,可以通过字符串 / 下标索引
    可以使用 to_tuple() 获取转成tuple类型
    ※ 另外需要注意的是,传参output_hidden_states=True 以及 output_attentions=True 等,我们才能从 outputs 中获取到更多的参数信息
    在这里插入图片描述

BaseModelOutput

  • 上面的 ModelOutput 只是定义了基础的格式和转换,接下来这个
    BaseModelOutput 则是继承自上面的类,并且可以获得更多参数信息
  • 可以看到,它存储了如下参数:
    last_hidden_state:最终隐藏层状态的张量值
    hidden_states:每一层的状态的张量值
    attentions:每一层的注意力的张量值

在这里插入图片描述

CausalLMOutput

  • 这个比较常用,是专门对因果LM输出用的
    它还提供了 loss 损失
    logits:LM头的预测分数,在CausalLM中即为在词汇表vocab中,下一个token的预测分数,并且未经过最后softmax归一之前的分数。
    在这里插入图片描述

其他 ModelOutput

  • 其他还有很多,主要是关注
    1)用的是 pt 还是 tf 还是 flax
    2)用的是哪个具体任务
    3)主要还是得对应哪个具体的 PretrainedModel
  • 比如 BaseModelOutputWithCrossAttentions 就用了交叉注意力的 PretrainedModel
    Seq2SeqModelOutput 给 s2s 模型的
    MaskedLMOutput 给 maskedLM的
    NextSentencePredictorOutput 给 NSP 任务的
    MultipleChoiceModelOutput 给多选任务的…
    你会发现,具体是哪一类,取决于你当时是用哪个 PretrainedModel
    所以你需要查询具体我可以获得什么输出之前,就去看预训练模型的那个类型吧。

SpecificModel

  • 之前讲过 PretrainedModel 是预训练模型的基类
    AutoModel 可以自动根据输入的参数,选择最合适的模型
    AutoModelForCausalLM,可以自动根据输入的参数,选择最合适的因果LM模型
    那问题来了,很多代码中貌似没有使用 AutoModel 呀,他们的导入头文件是从哪里来的呢?
    其实从 HF官网的Doc的最左下角找的:
    首先进入 Docs,找到 Transformers 库的 API,然后选择合适的版本号,用英文,左侧滚到底,就可以找到了
    在这里插入图片描述
  • 我这里是NLP任务,所以选择大类 TEXT MODELS
    这里举一些常用的模型吧:
    ALBERT, BART, BERT, BLOOM, GPT, GPT2, LLaMA, Llama2, REALM, RoBERTa, T5 ……
    我这里以 Llama2 为例子吧
    在这里插入图片描述
  • 步骤一:查看基本信息
    比如,llama的模型需要你去官网注册一下,它才会发给你。另外它还告诉你了,原始模型没有 pad token, 要添加的话怎么加
    在这里插入图片描述
  • 步骤二:查看怎么导入 modeltokenizer
    你就会发现,它通过它特殊的类加载了,这里是 LlamaForCausalLM, LlamaTokenizer
    在这里插入图片描述
  • 步骤三:查看对应的 config, tokenizer, model 的改动
    由于不是原始的 PretrainedConfig, PretrainedTokenizer, PretrainedModel 嘛,它肯定自己加了些东西
    你就进去浏览看下改动即可
    比如 LlamaConfig 中,有如下参数,比较多,还是建议看文档,自己背出来的话也太大佬了
    在这里插入图片描述
  • 它这里 model 有三个,主要还是看你需要用它来做什么任务,就选择哪个即可。
    在这里插入图片描述

相关文章:

  • Rust有没有信号量机制,在缓存有数据的时候才允许等待的进程取数据?
  • 【Go】令牌桶限流算法
  • Unity Text文本实现滚动跑马灯效果
  • (MATLAB)第五章-矩阵运算
  • okHttp MediaType MIME格式详解
  • Java的堆如何分代的?
  • 吴恩达机器学习笔记十六 如何debug一个学习算法 模型评估 模型选择和训练 交叉验证测试集
  • SpringCloudGateway理论与实践
  • 【docker基础学习之】镜像构建
  • VLAN FAQ
  • WiFi模块助力少儿编程:创新学习与实践体验
  • 【kvm企业级虚拟化】之初级篇
  • uniapp直接连接wifi(含有ios和安卓的注意事项)
  • MySQL通过SQL语句进行递归查询
  • python 蓝桥杯之并查集
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • mac修复ab及siege安装
  • Median of Two Sorted Arrays
  • Python进阶细节
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • vue中实现单选
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 翻译:Hystrix - How To Use
  • 官方解决所有 npm 全局安装权限问题
  • 利用jquery编写加法运算验证码
  • 聊聊hikari连接池的leakDetectionThreshold
  • 如何利用MongoDB打造TOP榜小程序
  • 阿里云重庆大学大数据训练营落地分享
  • 关于Android全面屏虚拟导航栏的适配总结
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​如何在iOS手机上查看应用日志
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #stm32整理(一)flash读写
  • (1)bark-ml
  • (10)STL算法之搜索(二) 二分查找
  • (zt)最盛行的警世狂言(爆笑)
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (六)激光线扫描-三维重建
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • .NET Core 2.1路线图
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET 命令行参数包含应用程序路径吗?
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法
  • [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试
  • [CISCN 2023 初赛]go_session
  • [IE9] IE9 Beta崩溃问题解决方案
  • [iOS]中字体样式设置 API
  • [OpenAI]继ChatGPT后发布的Sora模型原理与体验通道
  • [OpenGL(Win32)] - 3D 轮廓字体