人工智能写作网站,wordpress访问有的目录500,北京知名网站建设,兰州营销型网站建设理解最先进模型的起点GPT-2 源码 配置的解释
flyfish
为训练GPT模型设置和管理配置参数、日志记录以及实验的可重复性 理解最先进模型的起点GPT-2 理论知识 理解最先进模型的起点GPT-2 源码 注释 模型部分(from mingpt.model) utils.py
import os
import sys
import json
im…理解最先进模型的起点GPT-2 源码 配置的解释
flyfish
为训练GPT模型设置和管理配置参数、日志记录以及实验的可重复性 理解最先进模型的起点GPT-2 理论知识 理解最先进模型的起点GPT-2 源码 注释 模型部分(from mingpt.model) utils.py
import os
import sys
import json
import random
from ast import literal_evalimport numpy as np # 导入numpy库用于数值计算
import torch # 导入PyTorch库用于深度学习模型# -----------------------------------------------------------------------------def set_seed(seed): 设置随机种子以确保实验的可重复性 random.seed(seed)np.random.seed(seed)torch.manual_seed(seed)torch.cuda.manual_seed_all(seed)def setup_logging(config): 设置日志记录功能 work_dir config.system.work_dir# 如果工作目录不存在则创建os.makedirs(work_dir, exist_okTrue)# 记录命令行参数如果有with open(os.path.join(work_dir, args.txt), w) as f:f.write( .join(sys.argv))# 记录配置信息with open(os.path.join(work_dir, config.json), w) as f:f.write(json.dumps(config.to_dict(), indent4))class CfgNode: 轻量级的配置类灵感来自yacs # TODO: 转换为像yacs那样从字典子类化# TODO: 实现冻结功能以防止自伤# TODO: 在读写参数时增加存在性/覆盖性检查def __init__(self, **kwargs):# 更新实例的字典属性self.__dict__.update(kwargs)def __str__(self):# 返回配置的字符串表示return self._str_helper(0)def _str_helper(self, indent): 辅助方法支持嵌套缩进以美观打印 parts []for k, v in self.__dict__.items():if isinstance(v, CfgNode):parts.append(%s:\n % k)parts.append(v._str_helper(indent 1))else:parts.append(%s: %s\n % (k, v))parts [ * (indent * 4) p for p in parts]return .join(parts)def to_dict(self): 返回配置的字典表示 return { k: v.to_dict() if isinstance(v, CfgNode) else v for k, v in self.__dict__.items() }def merge_from_dict(self, d):# 从字典中更新配置self.__dict__.update(d)def merge_from_args(self, args):从字符串列表更新配置通常来自命令行参数即sys.argv[1:].参数格式预期为 --argvaluearg可以使用.表示嵌套子属性。例如--model.n_layer10 --trainer.batch_size32for arg in args:keyval arg.split()assert len(keyval) 2, 每个覆盖参数的格式应为 --argvalue当前为 %s % argkey, val keyval # 解包# 首先将val转换为Python对象try:val literal_eval(val)这里需要一些解释。- 如果val只是一个字符串literal_eval将抛出ValueError- 如果val表示某种对象如3, 3.14, [1,2,3], False, None等它将被创建except ValueError:pass# 找到适当的对象以插入属性assert key[:2] --key key[2:] # 去掉--keys key.split(.)obj selffor k in keys[:-1]:obj getattr(obj, k)leaf_key keys[-1]# 确保该属性存在assert hasattr(obj, leaf_key), f{key} 不是配置中存在的属性# 覆盖属性print(命令行覆盖配置属性 %s 为 %s % (key, val))setattr(obj, leaf_key, val)设置随机种子
set_seed(seed)函数设置了Python、Numpy和PyTorch的随机种子以确保实验的结果是可重复的。这对于调试和验证模型是非常重要的。
日志记录
setup_logging(config)函数用于设置日志记录。它会创建一个工作目录如果不存在并将命令行参数和配置信息记录在文件中。这样可以方便地跟踪和重现实验。
配置管理 CfgNode类是一个轻量级的配置类用于管理实验中的各种参数。它支持从字典、命令行参数等不同来源更新配置便于灵活地设置和修改参数。 __init__(self, **kwargs)初始化配置节点将传入的参数更新为实例属性。 __str__(self)返回配置的字符串表示用于打印配置。 _str_helper(self, indent)辅助方法支持嵌套缩进以美观打印。 to_dict(self)将配置转换为字典表示便于序列化和存储。 merge_from_dict(self, d)从字典中更新配置参数。 merge_from_args(self, args)从命令行参数中更新配置参数支持嵌套结构。
配置举例
{system: {seed: 3407,work_dir: ./out/adder},data: {ndigit: 2},model: {model_type: gpt-nano,n_layer: null,n_head: null,n_embd: null,vocab_size: null,block_size: null,embd_pdrop: 0.1,resid_pdrop: 0.1,attn_pdrop: 0.1},trainer: {device: auto,num_workers: 4,max_iters: null,batch_size: 64,learning_rate: 0.0005,betas: [0.9,0.95],weight_decay: 0.1,grad_norm_clip: 1.0}
}如果想看GPT-2的地基Transformer可以看下面的链接
Transformer - 注意⼒机制 Scaled Dot-Product Attention 计算过程 Transformer - 注意⼒机制 代码实现 Transformer - 注意⼒机制 Scaled Dot-Product Attention不同的代码比较 Transformer - 注意⼒机制 代码解释 Transformer - 注意⼒机制 Attention 中的 Q, K, V 解释1 Transformer - 注意⼒机制 Attention 中的 Q, K, V 解释2
Transformer的Encoder和Decoder之间的交互 Transformer - Self-Attention层的复杂度的计算 Transformer - 《Attention is All You Need》中的Scaled Dot-Product Attention为什么要Scaled Transformer - Layer Normalization Transformer - Teacher Forcing Transformer - Outputs(Shifted Right)
Transformer - model architecture Transformer - Positional Encoding 位置编码 代码实现 Transformer - 注意⼒机制 代码实现 Transformer - 掩码张量 Vanilla Transformer Transformer - 注意⼒机制 Attention Scaled Dot-Product Attention不同的代码比较 Transformer中的FeedForward Transformer中的 Add Norm