pytorch深度学习 之二 拟合数据 从线性到非线性
发布人:shili8
发布时间:2024-12-23 15:36
阅读次数:0
**PyTorch 深度学习之二: 拟合数据**
在前一篇文章中,我们介绍了 PyTorch 的基本概念和使用方法。现在,我们将深入探讨如何使用 PyTorch 来拟合数据,从线性到非线性。
###1. 线性拟合线性拟合是最简单的拟合方式,通常用于初学者或小规模数据集。在这种情况下,我们使用一个线性模型来预测目标变量。
import torchimport numpy as np# 设定随机种子torch.manual_seed(42) #生成一些样本数据np.random.seed(42) X = np.random.rand(100,1) *10y =3 +2 * X + np.random.randn(100,1) # 将数据转换为 PyTorch 张量X_tensor = torch.tensor(X, dtype=torch.float32) y_tensor = torch.tensor(y, dtype=torch.float32) # 定义线性模型class LinearModel(torch.nn.Module): def __init__(self): super(LinearModel, self).__init__() self.linear = torch.nn.Linear(1,1) # 输入维度为1,输出维度为1 def forward(self, x): out = self.linear(x) return out# 实例化线性模型model = LinearModel() # 定义损失函数和优化器criterion = torch.nn.MSELoss() optimizer = torch.optim.SGD(model.parameters(), lr=0.01) # 训练模型for epoch in range(100): optimizer.zero_grad() outputs = model(X_tensor) loss = criterion(outputs, y_tensor) loss.backward() optimizer.step() if (epoch+1) %10 ==0: print('Epoch [{}/{}], Loss: {:.4f}' .format(epoch+1,100, loss.item())) # 预测predictions = model(X_tensor).detach().numpy() print(predictions[:5])
###2. 非线性拟合非线性拟合是指使用一个复杂的模型来预测目标变量。在这种情况下,我们使用一个神经网络模型来预测目标变量。
import torchimport numpy as np# 设定随机种子torch.manual_seed(42) #生成一些样本数据np.random.seed(42) X = np.random.rand(100,1) *10y =3 +2 * X + np.sin(X) + np.random.randn(100,1) # 将数据转换为 PyTorch 张量X_tensor = torch.tensor(X, dtype=torch.float32) y_tensor = torch.tensor(y, dtype=torch.float32) # 定义神经网络模型class Net(torch.nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = torch.nn.Linear(1,10) # 输入维度为1,输出维度为10 self.fc2 = torch.nn.Linear(10,5) # 输出维度为10,输入维度为5 self.fc3 = torch.nn.Linear(5,1) # 输出维度为5,输入维度为1 def forward(self, x): out = torch.relu(self.fc1(x)) # 激活函数为relu out = torch.relu(self.fc2(out)) out = self.fc3(out) return out# 实例化神经网络模型model = Net() # 定义损失函数和优化器criterion = torch.nn.MSELoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.001) # 训练模型for epoch in range(100): optimizer.zero_grad() outputs = model(X_tensor) loss = criterion(outputs, y_tensor) loss.backward() optimizer.step() if (epoch+1) %10 ==0: print('Epoch [{}/{}], Loss: {:.4f}' .format(epoch+1,100, loss.item())) # 预测predictions = model(X_tensor).detach().numpy() print(predictions[:5])
### 总结在本文中,我们介绍了如何使用 PyTorch 来拟合数据,从线性到非线性。我们使用了一个线性模型和一个神经网络模型来预测目标变量,并展示了如何训练这些模型以最小化损失函数。在实际应用中,选择哪种模型取决于具体的任务和数据集。