构造一个PyTorch数据迭代器
def load_array(data_arrays, batch_size, is_train=True): #@save
"""构造一个PyTorch数据迭代器"""
dataset = data.TensorDataset(*data_arrays)
return data.DataLoader(dataset, batch_size, shuffle=is_train)
batch_size = 10
data_iter = load_array((features, labels), batch_size)
Sequential类定义模型
from torch import nn
#第一个指定输入特征形状,即2,第二个指定输出特征形状为1
net = nn.Sequential(nn.Linear(2, 1))
初始化模型参数
通过net[0]选择网络中的第一个图层, 然后使用weight.data和bias.data方法访问参数
使用替换方法normal_和fill_来重写参数值
net[0].weight.data.normal_(0, 0.01)
net[0].bias.data.fill_(0)
定义损失函数
计算均方误差使用的是MSELoss类,也称为平方𝐿2范数]。 默认情况下,它返回所有样本损失的平均值
loss = nn.MSELoss()
定义优化算法
PyTorch在optim模块中实现了该算法的许多变种。 当我们(实例化一个SGD实例)时,我们要指定优化的参数 (可通过net.parameters()我们的模型中获得)以及优化算法所需的超参数字典
trainer = torch.optim.SGD(net.parameters(), lr=0.03)
训练
num_epochs = 3
for epoch in range(num_epochs):
for X, y in data_iter:
l = loss(net(X) ,y)
trainer.zero_grad()
l.backward()
trainer.step()
l = loss(net(features), labels)
print(f'epoch {epoch + 1}, loss {l:f}')