x = torch.stack([batch_data[i:i+context_window] for i in ix]).long()
y = torch.stack([batch_data[i+1:i+context_window+1] for i in ix]).long()
# 返回特征值,目标值
return x, y
复制代码
torch.randint以及 torch.stack 需要学习一下,这种的文章有很多。
重点可以放在这两行代码上:
x = torch.stack([batch_data[i:i+context_window] for i in ix]).long()
y = torch.stack([batch_data[i+1:i+context_window+1] for i in ix]).long()
以滑动窗口的形式对数据进行获取特性值与目标值,因为训练的时候,是根据前N个字符去预测后面的1个字符,因此,目标值y的滑动窗口在保持原本大小(长度)的前提下,向右移动一位。
print("模型参数量:", sum([m.numel() for m in self.parameters()]))
复制代码
我想,看注释就可以了吧,我们创建了一个有些stupid的模型,布局很简朴:嵌入,线性变更,激活函数。唯一比力故意思的是,记住下面这个下令,以后可以用来查参数量。
print("模型参数量:", sum([m.numel() for m in self.parameters()]))
接下来,我们对上面那个斯丢匹得模型增加前向传播函数,也就是forward,换个名字,叫:“简朴的破模型”吧。 实际上broken代表着有题目。至于题目,立刻解答。
print(f"Epoch {epoch} | val loss {x['val']:.3f} | Time {batch_time:.3f} | ETA in seconds {batch_time * (config['epochs'] - epoch)/config['log_interval'] :.3f}")