本文共 2924 字,大约阅读时间需要 9 分钟。
PyTorch 神经网络的搭建通常分为以下几个关键步骤:数据准备、网络架构设计、损失函数与优化器选择以及反向传播与更新。
import torchimport torch.nn.functional as Fimport matplotlib.pyplot as plt# 数据准备n_data = 200x0 = torch.normal(2 * n_data, 1, (100, 2))y0 = torch.zeros(100)x1 = torch.normal(-2 * n_data, 1, (100, 2))y1 = torch.ones(100)x = torch.cat((x0, x1), 0).type(torch.FloatTensor)y = torch.cat((y0, y1), 0).type(torch.LongTensor)# 网络架构定义class Net(torch.nn.Module): def __init__(self, n_feature, n_hidden, n_output): super(Net, self).__init__() self.hidden = torch.nn.Linear(n_feature, n_hidden) self.out = torch.nn.Linear(n_hidden, n_output) def forward(self, x): x = F.relu(self.hidden(x)) x = self.out(x) return xnet = Net(n_feature=2, n_hidden=10, n_output=2)print(net)# 优化器与损失函数optimizer = torch.optim.SGD(net.parameters(), lr=0.02)loss_func = torch.nn.CrossEntropyLoss()# 训练过程plt.ion()for t in range(100): out = net(x) loss = loss_func(out, y) optimizer.zero_grad() loss.backward() optimizer.step() if t % 2 == 0: plt.cla() prediction = torch.max(out, 1)[1] accuracy = (prediction.data.numpy() == y.data.numpy()).sum() / y.size() plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=prediction.data.numpy(), s=100, lw=0, cmap='RdYlGn') plt.text(1.5, -4, 'Accuracy: %.2f' % accuracy, fontdict={'size': 20, 'color': 'red'}) plt.pause(0.1)plt.ioff()plt.show() import torchimport torch.nn.functional as Fimport matplotlib.pyplot as plt# 数据准备x_train = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1).type(torch.FloatTensor)y_train = x_train.pow(2) + 0.2 * torch.rand(x_train.size())# 网络架构定义class Net(torch.nn.Module): def __init__(self, n_feature, n_hidden, n_output): super(Net, self).__init__() self.hidden = torch.nn.Linear(n_feature, n_hidden) self.predict = torch.nn.Linear(n_hidden, n_output) def forward(self, x): x = F.relu(self.hidden(x)) x = self.predict(x) return xnet = Net(n_feature=1, n_hidden=10, n_output=1)print(net)# 优化器与损失函数optimizer = torch.optim.SGD(net.parameters(), lr=0.2)criterion = torch.nn.MSELoss()# 训练过程plt.ion()for t in range(200): prediction = net(x_train) loss = criterion(prediction, y_train) optimizer.zero_grad() loss.backward() optimizer.step() if t % 5 == 0: plt.cla() plt.scatter(x_train.numpy(), y_train.numpy()) plt.plot(x_train.numpy(), prediction.data.numpy(), 'r-', lw=5) plt.text(0.5, 0, 'Loss: %.4f' % loss.item(), fontdict={'size': 20, 'color': 'red'}) plt.pause(0.1)plt.ioff()plt.show() 在上述代码中,主要进行了以下改进:
通过以上代码示例,可以清晰地看到从数据准备到模型训练再到结果可视化的完整流程。每一步都经过精心设计,确保代码既简洁又高效。
转载地址:http://jfxp.baihongyu.com/