Pytorch实现神经网络
1. 数据准备
首先,进行数据的准备,这里主要是指的是测试数据集,输入量依照矩阵的形式进行输入,确定好属性个数以及样本个数。
2. 定义神经网络
设计一个神经网络,即能计算网络的前馈传播,得到的预测值是后续计算梯度的基础。当然定义的时候类是需要继承自pytorch中的nn.Module类,初始化过程一是要继承父类的属性,另外就是需要定义自己的网络,是线性还是其他的,torch.nn.Linear类,定义出层。然后,在各层网络都创建后,需要进行网络的前馈传播计算,即给出一个输入,要能够得到预测值,定义一个实例方法forward,这其中如果需要激活函数那么在这里就可以添加,如果没有则直接线性计算结果输出就行。
3. 定义实例、损失函数和优化器
在创建神经网络后,需要进行实例的创建。接下来要进行损失函数的确定,如线性回归中最常用的MSE,调用torch.nn.MSELoss()进行生成。在上述基础上,要进行神经网络参数的更新计算,那么就需要有一个优化器来完成反向传播时参数的更新。调用torch.optim.SGD()生成一个随机梯度下降算法的优化器。
4. 训练(training cycle)
在上述的对象都创建好的基础上,就要开始进行训练学习,每一次循环称为一个epoch,适当增大epoch值能够得到更好的效果。每一次的循环中需要完成预测值,即输入一个x,那么会产生一个当前的y_pred,然后利用这个pred值,能够计算出损失函数的值是多少,然后调用优化器进行反向传播和梯度归0,从而完成训练。
上述的过程是基本的神经网络建立过程,依照此思路均可以扩展到其他的问题中的网络生成中!
import torch
x_data = torch.Tensor([[1.06], [2.1], [2.96]])
y_data = torch.Tensor([[2.04], [3.98], [6.05]])
class LinearModel(torch.nn.Module):
def __init__(self):
super(LinearModel, self).__init__()
self.linear = torch.nn.Linear(1, 1)
def forward(self, x):
y_pred = self.linear(x)
return y_pred
model = LinearModel()
mseloss = torch.nn.MSELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
for epoch in range(1000):
y_pred = model(x_data)
loss = mseloss(y_pred, y_data)
lo.append(loss.item())
print(epoch, loss.item())
optimizer.zero_grad()
loss.backward()
optimizer.step()
print('w = ', model.linear.weight.item())
print('b = ', model.linear.bias.item())
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred = ', y_test.data)
本站文章如非特别说明,均为原创。未经本人同意,请勿转载!转载请务必注明出处!