下面是通过自定义net实现回归算法的pytorch代码示例:
import torch
import torch.nn as nn
import torch.optim as optim
# 定义自定义的net类
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
# 定义层
self.linear1 = nn.Linear(1, 10)
self.linear2 = nn.Linear(10, 1)
def forward(self, x):
# 前向传播
x = self.linear1(x)
x = torch.relu(x)
x = self.linear2(x)
return x
# 定义训练数据
x_train = torch.tensor([[1.0], [2.0], [3.0], [4.0], [5.0], [6.0], [7.0], [8.0], [9.0], [10.0]], dtype=torch.float32)
y_train = torch.tensor([[2.0], [4.0], [6.0], [8.0], [10.0], [12.0], [14.0], [16.0], [18.0], [20.0]], dtype=torch.float32)
# 实例化net
net = Net()
# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(net.parameters(), lr=0.01)
# 训练
for epoch in range(1000):
optimizer.zero_grad() # 梯度归零
output = net(x_train) # 前向传播
loss = criterion(output, y_train) # 计算损失
loss.backward() # 反向传播
optimizer.step() # 更新参数
# 预测
x_test = torch.tensor([[11.0], [12.0], [13.0]], dtype=torch.float32)
y_pred = net(x_test)
print(y_pred)
说明:
首先,定义了一个自定义的net类,并在构造函数中定义了2个线性层。然后,在forward函数中完成了前向传播。接着,定义了训练数据x_train和y_train。之后,实例化net、定义了损失函数和优化器。在训练循环中,每次循环都要先梯度清零、进行前向传播、计算损失、进行反向传播和参数更新。最后,定义了测试数据x_test,并用训练好的模型进行预测,并打印输出预测结果。