当前位置:实例文章 » 其他实例» [文章]pytorch深度学习 之二 拟合数据 从线性到非线性

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 来拟合数据,从线性到非线性。我们使用了一个线性模型和一个神经网络模型来预测目标变量,并展示了如何训练这些模型以最小化损失函数。在实际应用中,选择哪种模型取决于具体的任务和数据集。

相关标签:pytorch
其他信息

其他资源

Top