import math
import torch
import torch.nn as nn
from torch.nn import functional as F
# 超参数
context_length = 128 # 上下文长度
d_model = 512 # 模型维度
num_blocks = 12 # Transformer块的数量
num_heads = 8 # 多头注意力机制中的头数
dropout = 0.1 # 丢弃率,是一种正则化技术,它在训练过程中以一定的概率随机将神经元的输出置零,从而减小模型对于训练数据的过拟合风险
device = 'cuda' if torch.cuda.is_available() else 'cpu' # 设备: 此参数确定模型是否应在GPU上进行训练和运行('cuda'),如果可用的话,或者在CPU上进行训练和运行('cpu')。
TORCH_SEED = 1337 # PyTorch的随机种子,这是用于初始化PyTorch的随机数生成器的种子值。
torch.manual_seed(TORCH_SEED) # 设置种子可确保结果的可重复性,即如果使用相同的种子运行代码,每次都应该获得相同的结果。
# 定义前馈神经网络(FeedForwardNetwork)的类,该网络包含两个线性层和激活函数
class FeedForwardNetwork(nn.Module):
def __init__(self):
super().__init__()
# 使用 nn.Sequential 定义了一个包含两个线性层(全连接层)和一个激活函数的序列
self.ffn = nn.Sequential(
# 第一个线性层 (nn.Linear(d_model, d_model * 4)):输入特征维度为 d_model,输出特征维度为 d_model * 4
nn.Linear(d_model, d_model * 4),
# ReLU 激活函数 (nn.ReLU()):应用于线性层的输出
nn.ReLU(),
# 第二个线性层 (nn.Linear(d_model * 4, d_model)):输入特征维度为 d_model * 4,输出特征维度为 d_model
nn.Linear(d_model * 4, d_model),
# Dropout 层 (nn.Dropout(dropout)):应用丢弃率为 dropout 的 dropout 操作
nn.Dropout(dropout)
)
# 前向传播函数 (forward) 接受输入张量 x,进行前馈神经网络的前向传播,并返回输出张量
def forward(self, x):
# 输入 x 经过前馈神经网络 self.ffn,其输出即为整个前馈神经网络的输出
return self.ffn(x)
# 定义 Scaled Dot Product Attention(缩放点积注意力)的类,该注意力层可以被嵌入到 Transformer 模型中
class Attention(nn.Module):
def __init__(self):
super().__init__()
# self.Wq, self.Wk, self.Wv: 分别是用于计算查询、键、值的线性层。这些层将输入的维度 d_model 映射到 d_model // num_heads
self.Wq = nn.Linear(d_model, d_model // num_heads, bias=False)
self.Wk = nn.Linear(d_model, d_model // num_heads, bias=False)
self.Wv = nn
手写大模型---模块Model.py
最新推荐文章于 2025-02-05 13:54:12 发布