pytorch直线拟合

目录

1、数据分析

2、pytorch直线拟合


1、数据分析

直线拟合的前提条件通常包括以下几点:

存在线性关系:这是进行直线拟合的基础,数据点之间应该存在一种线性关系,即数据的分布可以用直线来近似描述。这种线性关系可以是数据点在直角坐标系上的分布趋势,也可以是通过实验或观测得到的数据点之间的关系。

数据点之间的误差是随机的:误差应该是随机的,没有任何系统性的偏差,并且符合随机误差的统计规律。这意味着数据点在拟合直线周围的分布应该是随机的,而不是受到某种特定的规律或趋势的影响。

直线应符合数据点的总体趋势:在拟合直线时,应该尽可能地符合数据点的总体趋势,而不是被一些异常值所影响。如果存在一些异常值,它们不应该对拟合结果产生过大的影响。

数据点的数量应该足够多:在进行直线拟合时,需要足够多的数据点来保证拟合结果的准确性和可靠性。通常来说,数据点的数量应该足够多,以便涵盖各种情况,并且能够反映出数据的真实分布情况。

数据的观测或实验过程是可靠的:数据的观测或实验过程应该是可靠的,这意味着数据的测量值应该是准确的,并且没有受到某些特定因素的影响。如果数据的观测或实验过程存在偏差或误差,那么直线拟合的结果也可能受到影响。

从散点图看出,数据具有明显的线性关系​,本例不过多讨论数据是满足直线拟合的其它条件。

import torch
import matplotlib.pyplot as plt
x=torch.Tensor([1.4,5,11,16,21])
y=torch.Tensor([14.4,29.6,62,85,113.4])
plt.scatter(x.numpy(),y.numpy())
plt.show()

2、pytorch直线拟合

基于梯度下降法实现直线拟合。训练过程实际上是一种批量梯度下降(Batch Gradient Descent),这是因为每次更新参数时都使用了所有的数据。另外,学习率 learning_rate 和训练轮数 epochs 是可以调整的超参数,对模型的训练效果有很大影响。

import torch
import matplotlib.pyplot as plt
def Produce_X(x):
    x0=torch.ones(x.numpy().size)
    X=torch.stack((x,x0),dim=1)
    return X
def train(epochs=1,learning_rate=0.01):
    for epoch in range(epochs):
        output=inputs.mv(w)
        loss=(output-target).pow(2).sum()
        loss.backward()
        w.data-=learning_rate*w.grad
        w.grad.zero_()
        if epoch%80==0:
            draw(output,loss)
    return w,loss
def draw(output,loss):
    plt.cla()
    plt.scatter(x.numpy(), y.numpy())
    plt.plot(x.numpy(),output.data.numpy(),'r-',lw=5)
    plt.text(5,20,'loss=%s' % (loss.item()),fontdict={'size':20,'color':'red'})
    plt.pause(0.005)
​
if __name__ == "__main__":
    x = torch.Tensor([1.4, 5, 11, 16, 21])
    y = torch.Tensor([14.4, 29.6, 62, 85.5, 113.4])
    X = Produce_X(x)
    inputs = X
    target = y
    w = torch.rand(2, requires_grad=True)
    w,loss=train(10000,learning_rate=1e-4)
    print("final loss:",loss.item())
    print("weigths:",w.data)
    plt.show()
​

final loss: 8.216197967529297

weigths: tensor([5.0817, 5.6201])

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch拟合通常发生在模型训练时,模型在训练集上表现良好,但在测试集或新的数据上表现不佳。这种现象可能是由于模型过于复杂、数据集过小、训练次数过多等原因造成的。 下面是一些减轻PyTorch拟合的常见方法: 1. 更多的数据:增加训练集数据量可以减少过拟合的风险。如果无法获得更多的真实数据,可以考虑使用数据增强技术来扩充训练集,如随机裁剪、翻转、旋转等。 2. 简化模型:过于复杂的模型容易记住训练集中的噪声,从而导致过拟合。可以通过减少模型的层数、节点数或使用正则化技术(如L1、L2正则化)来简化模型。 3. 正则化:正则化是通过在损失函数中添加一个正则化项来限制模型参数的大小。常见的正则化技术包括L1正则化和L2正则化。它们有助于防止模型对训练数据过拟合。 4. 早停法:通过监控模型在验证集上的性能,在性能不再提升时停止训练,可以防止模型过度拟合训练集。 5. Dropout:Dropout是一种正则化技术,通过在训练过程中随机丢弃一部分节点的输出来减少模型复杂度。这样可以防止某些特定的节点过拟合训练数据。 6. 批标准化:批标准化是一种在深度神经网络中常用的正则化技术,通过对每个批次的输入进行标准化来减少内部协变量偏移,有助于提高模型的泛化性能。 以上是一些常见的方法来减轻PyTorch模型的过拟合问题。根据具体情况选择合适的方法,可以有效提高模型的泛化能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值