手写大模型---模块Model.py

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值