pytorch 线性回归

import torch
import numpy as np
import matplotlib.pyplot as plt
torch.manual_seed(2017)
lr = 1e-2

# 数据
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)

plt.plot(x_train, y_train, 'bo')
plt.show()
# 转换为tensor
x_train = torch.from_numpy(x_train)
y_train = torch.from_numpy(y_train)
# 初始化参数w和b
w = torch.randn((1), requires_grad=True)
b = torch.zeros((1), requires_grad=True)

print(w)
print(b)

#创建线性回归模型
def linear_model(x):
    return x * w + b

# 定义损失函数
def get_loss(y_, y):
    return torch.mean((y_ - y) ** 2)


for e in range(10):  # 进行10次更新
    y_ = linear_model(x_train)
    loss = get_loss(y_, y_train)
	# 自动求导
    loss.backward()
    # 更新权重
    with torch.no_grad():
        w -= lr * w.grad
        b -= lr * b.grad

        w.grad = None  # 梯度归零
        b.grad = None  # 梯度归零
    print('epoch:	{},	loss:	{}'.format(e, loss.item()))

# %%

y_ = linear_model(x_train)
plt.plot(x_train.data.numpy(), y_train.data.numpy(), 'bo', label='real')
plt.plot(x_train.data.numpy(), y_.data.numpy(), 'r-', label='estimated')
plt.legend()
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、付费专栏及课程。

余额充值