一字一诗 / 第 15 课 / 图 04
当前源码阅读进入 GPT:把输入算成下一字的分数
按顺序看 hidden、blocks、logits、loss,不需要一开始记住英文。
poetry_gpt/model.py · 第 90—99 行(当前源码节选)
90 def forward(self, tokens, targets=None):
91 _, length = tokens.shape
92 if length > self.config.context: raise ValueError("输入超过模型的前文长度。")
93 positions = torch.arange(length, device=tokens.device)
94 hidden = self.dropout(self.characters(tokens) + self.positions(positions))
95 for block in self.blocks: hidden = block(hidden)
96 logits = self.output(self.final_norm(hidden))
97 loss = None if targets is None else F.cross_entropy(logits.reshape(-1, logits.size(-1)),
98 targets.reshape(-1), ignore_index=-100)
99 return logits, loss