pytorch 深度学习入门代码 (一)线性回归代码实现

本文通过使用PyTorch框架实现了一维线性回归模型,并通过具体的训练数据集进行了模型训练与验证。演示了如何定义模型结构、损失函数、优化器,并通过迭代训练提升模型性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

"""一维线性回归代码实现"""

import torch
from torch.autograd import Variable
import matplotlib.pyplot as plt
import torch.nn as nn
import torch.optim as optim
import numpy as np

class LinearRegression(nn.Module):
    def __init__(self):
        super(LinearRegression, self).__init__()
        self.linear = nn.Linear(1,1)


    def forward(self, x):
        out = self.linear(x)
        return out



if __name__ == '__main__':
    x_train = np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168], [9.779], [6.182], [7.59], [2.167], [7.042], [10.791], [5.313], [7.997], [3.1]], dtype=np.float32)

    y_train = np.array([[1.7], [2.76], [2.09], [3.19], [1.694], [1.573], [3.366], [2.596], [2.53], [1.221], [2.827], [3.465], [1.65], [2.904], [1.3]], dtype=np.float32)

    x_train = torch.from_numpy(x_train)
    y_train = torch.from_numpy(y_train)

    if torch.cuda.is_available():
        model = LinearRegression().cuda()
    else:
        model = LinearRegression()

    criterion = nn.MSELoss()
    optimizer = optim.SGD(model.parameters(), lr=1e-3)


    num_epochs = 1000
    for epoch in range(num_epochs):
        if torch.cuda.is_available():
            inputs = Variable(x_train).cuda()
            target = Variable(y_train).cuda()
        else:
            inputs = Variable(x_train)
            target = Variable(y_train)

        # forward
        out = model.forward(inputs)
        loss = criterion(out, target)
        # backward
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        if(epoch+1)%20==0:
            print('Epoch[{}/{}], loss: {:.6f}'.format(epoch+1, num_epochs, loss.item()))

    model.eval()
    model.cpu()
    predict = model(Variable(x_train))
    predict = predict.data.numpy()
    plt.plot(x_train.numpy(), y_train.numpy(), 'ro', label='Original data')
    plt.plot(x_train.numpy(), predict, label='Fitting Line')
    plt.show()

 结果图

 

PyTorch种基于Python的科学计算库,它广泛应用于深度学习和人工智能领域。其中,PyTorch实现了许多机器学习算法,包括线性回归线性回归种用于建立输入变量和输出变量之间线性关系的机器学习算法。在PyTorch中,我们可以使用torch.nn模块来实现线性回归。 下面是个简单的PyTorch线性回归模型的代码示例: ```python import torch import torch.nn as nn import matplotlib.pyplot as plt # 创建训练数据 x = torch.randn(100, 1) * 10 y = x + 3 * torch.randn(100, 1) # 定义模型 model = nn.Linear(1, 1) # 定义损失函数 criterion = nn.MSELoss() # 定义优化器 optimizer = torch.optim.SGD(model.parameters(), lr=0.01) # 训练模型 num_epochs = 1000 for epoch in range(num_epochs): # 前向传播 y_pred = model(x) loss = criterion(y_pred, y) # 反向传播 optimizer.zero_grad() loss.backward() optimizer.step() # 打印损失 if (epoch+1) % 100 == 0: print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item())) # 可视化结果 predicted = model(x).detach().numpy() plt.plot(x.numpy(), y.numpy(), 'ro', label='Original data') plt.plot(x.numpy(), predicted, label='Fitted line') plt.legend() plt.show() ``` 在这个例子中,我们首先创建了100个随机数作为输入数据,并使用这些数据生成对应的输出数据。然后,我们定义了个具有单个输入和输出的线性模型,并将均方误差(MSE)作为损失函数。 接下来,我们使用随机梯度下降(SGD)作为优化器来训练模型。在每个epoch中,我们执行了次前向传播和反向传播,并使用优化器来更新模型参数。 最后,我们可视化了模型预测结果和原始数据,以便更好地理解模型的性能。 总的来说,PyTorch提供了个简单而强大的方法来实现线性回归模型。通过使用PyTorch,我们可以轻松地定义模型、损失函数和优化器,并进行训练和预测。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值