pytorch 线性回归总结

news2025/1/31 8:12:00

测试1( y = 3 ∗ x 1 − 4 ∗ x 2 y=3*x_{1}-4*x_{2} y=3x14x2),lr=1e-2

%matplotlib inline
import torch
import numpy as np
torch.manual_seed(1)
from torch.nn import Linear
from torch.autograd import Variable
import torch.nn as nn
import random
np.random.seed(1)
random.seed(1)   #每次运行的结果都一样
torch.manual_seed(1) 

import torch
import matplotlib.pyplot as plt

# x1 = torch.unsqueeze(torch.linspace(-1, 1, 200), dim=1)
# x2 = torch.unsqueeze(torch.linspace(-2, 2, 200), dim=1)
#x3 = torch.unsqueeze(torch.linspace(-2, 2, 100), dim=1)

x1=torch.randn(200,1)
x2=torch.randn(200,1)

y = 3*x1 -4*x2

# # 画图
# plt.scatter(x.data.numpy(), y.data.numpy())
# plt.show()
# import numpy as np
# import matplotlib.pyplot as plt
# from mpl_toolkits import mplot3d

# ax = plt.axes(projection='3d')
# ax.scatter3D(x1.data.numpy(), x2.data.numpy(),y.data.numpy())
# print(x1.size())
# print(x2.size())
# print(y.size())
#torch.cat((x1,x2),dim=1)#保持
class Net(nn.Module):#这里是大写的Module
    def __init__(self):
        super(Net,self).__init__()
        self.Linear=nn.Linear(2,1)#把线性层赋值给自己的属性
    def forward(self,x):#forward()是有两个参数的
        x=self.Linear(x)
        return x
model=Net()#网络
print(model)
criter=torch.nn.MSELoss()#损失函数

#optimizer = torch.optim.SGD(model.parameters(), lr=1e-2)#优化器

optimizer=torch.optim.Adam(model.parameters(),lr=1e-2)
#还需要一个DataGenerator()
num_epochs=1000
for i in range(num_epochs):
    #向前传播
    input=Variable(torch.cat((x1,x2),dim=1))
    target=Variable(y)
    out=model(input)#
    loss=criter(out,target)#
    #向后传播
    optimizer.zero_grad()#梯度清0
    loss.backward()#反向传播
    optimizer.step()#更新梯度
    print("epoch=%d,loss=%.6f"%(i,loss.item()))
#model.eval()
print(model)
parm={}
for name,parameters in model.named_parameters():
    print(name,':',parameters.size())
    parm[name]=parameters.detach().numpy()
print(parm)

结果如下
在这里插入图片描述
可以看到这个结果是准确的,但是一定要注意迭代的次数不能太少,且学习率不能太低,否则不容易收敛到真值,从而怀疑是不是自己代码写错了

测试2( y = 3 ∗ x 1 − 4 ∗ x 2 y=3*x_{1}-4*x_{2} y=3x14x2,lr=1e-3)

%matplotlib inline
import torch
import numpy as np
torch.manual_seed(1)
from torch.nn import Linear
from torch.autograd import Variable
import torch.nn as nn
import random
np.random.seed(1)
random.seed(1)   #每次运行的结果都一样
torch.manual_seed(1) 

import torch
import matplotlib.pyplot as plt

# x1 = torch.unsqueeze(torch.linspace(-1, 1, 200), dim=1)
# x2 = torch.unsqueeze(torch.linspace(-2, 2, 200), dim=1)
#x3 = torch.unsqueeze(torch.linspace(-2, 2, 100), dim=1)

x1=torch.randn(200,1)
x2=torch.randn(200,1)

y = 3*x1 -4*x2

# # 画图
# plt.scatter(x.data.numpy(), y.data.numpy())
# plt.show()
# import numpy as np
# import matplotlib.pyplot as plt
# from mpl_toolkits import mplot3d

# ax = plt.axes(projection='3d')
# ax.scatter3D(x1.data.numpy(), x2.data.numpy(),y.data.numpy())
# print(x1.size())
# print(x2.size())
# print(y.size())
#torch.cat((x1,x2),dim=1)#保持
class Net(nn.Module):#这里是大写的Module
    def __init__(self):
        super(Net,self).__init__()
        self.Linear=nn.Linear(2,1)#把线性层赋值给自己的属性
    def forward(self,x):#forward()是有两个参数的
        x=self.Linear(x)
        return x
model=Net()#网络
print(model)
criter=torch.nn.MSELoss()#损失函数

#optimizer = torch.optim.SGD(model.parameters(), lr=1e-2)#优化器

optimizer=torch.optim.Adam(model.parameters(),lr=1e-3)
#还需要一个DataGenerator()
num_epochs=1000
for i in range(num_epochs):
    #向前传播
    input=Variable(torch.cat((x1,x2),dim=1))
    target=Variable(y)
    out=model(input)#
    loss=criter(out,target)#
    #向后传播
    optimizer.zero_grad()#梯度清0
    loss.backward()#反向传播
    optimizer.step()#更新梯度
    print("epoch=%d,loss=%.6f"%(i,loss.item()))
#model.eval()
print(model)
parm={}
for name,parameters in model.named_parameters():
    print(name,':',parameters.size())
    parm[name]=parameters.detach().numpy()
print(parm)
## 如果学习率过低,收敛很慢

结果如下
在这里插入图片描述
可以看到这里没有收敛的,

测试3( y = 3 ∗ x + 4 y = 3*x +4 y=3x+4一元线性回归)

%matplotlib inline
import torch
import numpy as np
torch.manual_seed(1)
from torch.nn import Linear
from torch.autograd import Variable
import torch.nn as nn
import random
np.random.seed(1)
random.seed(1)   #每次运行的结果都一样
torch.manual_seed(1) 

import torch
import matplotlib.pyplot as plt

x1=torch.randn(200,1)


y = 3*x1 +4

# # 画图
# plt.scatter(x.data.numpy(), y.data.numpy())
# plt.show()
# import numpy as np
# import matplotlib.pyplot as plt
# from mpl_toolkits import mplot3d

# ax = plt.axes(projection='3d')
# ax.scatter3D(x1.data.numpy(), x2.data.numpy(),y.data.numpy())
# print(x1.size())
# print(x2.size())
# print(y.size())
#torch.cat((x1,x2),dim=1)#保持
class Net(nn.Module):#这里是大写的Module
    def __init__(self):
        super(Net,self).__init__()
        self.Linear=nn.Linear(1,1)#把线性层赋值给自己的属性
    def forward(self,x):#forward()是有两个参数的
        x=self.Linear(x)
        return x
model=Net()#网络
print(model)
criter=torch.nn.MSELoss()#损失函数

#optimizer = torch.optim.SGD(model.parameters(), lr=1e-2)#优化器

optimizer=torch.optim.Adam(model.parameters(),lr=1e-2)
#还需要一个DataGenerator()
num_epochs=1000
for i in range(num_epochs):
    #向前传播
    input=Variable(x1)
    target=Variable(y)
    out=model(input)#
    loss=criter(out,target)#
    #向后传播
    optimizer.zero_grad()#梯度清0
    loss.backward()#反向传播
    optimizer.step()#更新梯度
    print("epoch=%d,loss=%.6f"%(i,loss.item()))
#model.eval()
print(model)
parm={}
for name,parameters in model.named_parameters():
    print(name,':',parameters.size())
    parm[name]=parameters.detach().numpy()
print(parm)

结果如下
在这里插入图片描述

测试4 y = 3 ∗ x + 4 y = 3*x +4 y=3x+4 使用dataloader-batch_size=32

%matplotlib inline
import torch
import numpy as np
torch.manual_seed(1)
from torch.nn import Linear
from torch.autograd import Variable
from torch.utils.data import DataLoader, Dataset,TensorDataset
import torch.nn as nn
import random
np.random.seed(1)
random.seed(1)   #每次运行的结果都一样
torch.manual_seed(1) 

import torch
import matplotlib.pyplot as plt

x1=torch.randn(200,1)


y = 3*x1 +4

# # 画图
# plt.scatter(x.data.numpy(), y.data.numpy())
# plt.show()
# import numpy as np
# import matplotlib.pyplot as plt
# from mpl_toolkits import mplot3d

# ax = plt.axes(projection='3d')
# ax.scatter3D(x1.data.numpy(), x2.data.numpy(),y.data.numpy())
# print(x1.size())
# print(x2.size())
# print(y.size())
#torch.cat((x1,x2),dim=1)#保持
class Net(nn.Module):#这里是大写的Module
    def __init__(self):
        super(Net,self).__init__()
        self.Linear=nn.Linear(1,1)#把线性层赋值给自己的属性
    def forward(self,x):#forward()是有两个参数的
        x=self.Linear(x)
        return x
model=Net()#网络
print(model)
criter=torch.nn.MSELoss()#损失函数

dataset = TensorDataset(torch.FloatTensor(x1),torch.FloatTensor(y))

dataloader = DataLoader(dataset,batch_size = 32)

#optimizer = torch.optim.SGD(model.parameters(), lr=1e-2)#优化器

optimizer=torch.optim.Adam(model.parameters(),lr=1e-3)
#还需要一个DataGenerator()
num_epochs=1000
for epoch in range(num_epochs):
    #向前传播
    mse_loss=0
    for idx,(input_x,target_y) in enumerate(dataloader):
        input=Variable(input_x)
        target=Variable(target_y)
        out=model(input)#
        loss=criter(out,target)#
        mse_loss += loss.item()
        #向后传播
        optimizer.zero_grad()#梯度清0
        loss.backward()#反向传播
        optimizer.step()#更新梯度
    print("epoch={},mse loss ={}".format(epoch,mse_loss/len(dataloader)))
model.eval()
print(model)
parm={}
for name,parameters in model.named_parameters():
    print(name,':',parameters.size())
    parm[name]=parameters.detach().numpy()
print(parm)

在这里插入图片描述可以看到使用batch_size进行训练时,也是可以得到准确的结果的

测试5( y = 3 ∗ x 1 − 4 ∗ x 2 + 2.30 y=3*x1-4*x2+2.30 y=3x14x2+2.30 dataloader,batch_size=32)

%matplotlib inline
import torch
import numpy as np
torch.manual_seed(1)
from torch.nn import Linear
from torch.autograd import Variable
from torch.utils.data import DataLoader, Dataset,TensorDataset
import torch.nn as nn
import random
np.random.seed(1)
random.seed(1)   #每次运行的结果都一样
torch.manual_seed(1) 

import torch
import matplotlib.pyplot as plt

# x1 = torch.unsqueeze(torch.linspace(-1, 1, 200), dim=1)
# x2 = torch.unsqueeze(torch.linspace(-2, 2, 200), dim=1)
#x3 = torch.unsqueeze(torch.linspace(-2, 2, 100), dim=1)

x1=torch.randn(200,1)
x2=torch.randn(200,1)

y = 3*x1 -4*x2 + 2.30


class Net(nn.Module):#这里是大写的Module
    def __init__(self):
        super(Net,self).__init__()
        self.Linear=nn.Linear(2,1)#把线性层赋值给自己的属性
    def forward(self,x):#forward()是有两个参数的
        x=self.Linear(x)
        return x
model=Net()#网络
print(model)
criter=torch.nn.MSELoss()#损失函数

#optimizer = torch.optim.SGD(model.parameters(), lr=1e-2)#优化器

optimizer=torch.optim.Adam(model.parameters(),lr=1e-2)
dataset = TensorDataset(torch.FloatTensor(x1),torch.FloatTensor(x2),torch.FloatTensor(y))
dataloader = DataLoader(dataset,batch_size = 32)

#还需要一个DataGenerator()
num_epochs=1000
for epoch in range(num_epochs):
    mse_loss=0
    for idx,(input_x1,input_x2,target_y) in enumerate(dataloader):
        #向前传播
        input=Variable(torch.cat((input_x1,input_x2),dim=1))
        target=Variable(target_y)
        out=model(input)#
        loss=criter(out,target)#
        mse_loss += loss.item()
        #向后传播
        optimizer.zero_grad()#梯度清0
        loss.backward()#反向传播
        optimizer.step()#更新梯度
    print("epoch={},mse loss ={}".format(epoch,mse_loss/len(dataloader)))
#model.eval()
print(model)
parm={}
for name,parameters in model.named_parameters():
    print(name,':',parameters.size())
    parm[name]=parameters.detach().numpy()
print(parm)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录-68-669. 修剪二叉搜索树

目录前言题目1.按照二叉搜索树特性遍历整棵二叉搜索树,2. 本题思路分析:3. 算法实现4. 算法坑点前言 我在刷卡哥的“代码随想录”,自己的总结笔记均会放在“算法刷题-代码随想录”该专栏下。 代码随想录此题链接 题目 1.按照二叉搜索树特性…

JavaWeb开发 —— JavaScript(JS)

目录 一、什么是JavaScript ? 二、引入方式 三、基础语法 1. 书写语法 2. 输出语句 3. 变量 4. 数据类型 5. 运算符 6. 类型转换 四、函数 五、对象 1. Array数组 2. String 字符串 3. JSON 4. BOM 5. DOM 六、时间监听 一、什么是JavaSc…

MAE论文笔记+Pytroch实现

Masked Autoencoders Are Scalable Vision Learners, 2021 近期在梳理Transformer在CV领域的相关论文,落脚点在于如何去使用Pytroch实现如ViT和MAE等。通过阅读源码,发现不少论文的源码都直接调用timm来实现ViT。故在此需要简单介绍一下timm…

Vulnhub_Pylington

目录 一、信息收集 (一)端口服务探测 (二)目录扫描 二、漏洞挖掘 (一)robots敏感信息泄露 (二)python IDE沙箱绕过RCE 1. python敏感函数沙盒绕过 2. exec(__import_…

2.3 连续性随机变量

思维导图: 学习目标: 我会按照以下步骤学习连续型随机变量: 复习概率论的基础知识,包括概率、期望、方差等概念和公式,以及离散型随机变量的概率分布函数和概率质量函数的概念和性质。 学习连续型随机变量的概念和性…

在线文章生成-自动文章生成

文章生成软件 文章生成软件是一种能够自动生成文章的创作工具,可以大幅提高创作效率并节省创作成本。使用文章生成软件可以有效缩短文章的创作时间,尤其是在大批量的文章生产和时间紧迫的情况下,有着重要的作用。以下是文章生成软件可以为我…

初识C++之位图与布隆过滤器

一、位图 1.位图的概念 在了解位图前,先来看这么一道题: 假设给你40亿个没有排序的不重复的无符号整数。再给你一个无符号整数,让你判断这个整数是否在这40亿个数之中。 对于这道题,一般情况下的解法有很多,例如二…

如何利用空号检测 API 降低企业的业务成本

引言 电话营销和短信营销是现代营销活动的重要手段,但是无效号码的存在导致了很多资源浪费。利用空号检测 API 就可以避免企业向无效号码发送营销信息,降低营销成本。 本文将介绍空号检测 API 的工作原理以及如何利用空号检测 API 降低业务成本的多种方…

十分钟教你部署一个属于自己的chatgpt网站

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

( “树” 之 DFS) 543. 二叉树的直径 ——【Leetcode每日一题】

543. 二叉树的直径 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 : 给定二叉树 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 注意 :两结点之间…

屏幕色彩(一)-已知混色光色点求配色比

文章目录计算公式html源码运行结果计算公式 [WxWyWz][M][RGB]\begin{gather} \begin{bmatrix} W_x\\ W_y\\W_z \end{bmatrix} \begin{bmatrix} M \end{bmatrix} \begin{bmatrix} R\\G\\B \end{bmatrix} \end{gather} ​Wx​Wy​Wz​​​[M​]​RGB​​​​ 其中,Wxw…

STM-32:串口收发数据包—串口收发HEX数据包/串口收发文本数据包

目录一、发送HEX数据包1.1固定包长,含包头包尾(包尾不是必须的)1.2可变包长,含包头包尾二、接收HEX数据包三、发送文本数据包3.1固定包长,含包头包尾3.2可变包长,含包头包尾四、接收文本数据包五、HEX数据包…

73-Linux_线程安全

线程安全一.什么是线程安全二.strtok和strtok_r1.strtok2.strtok_r三.多线程中执行fork1.多线程中某个线程调用 fork(),子进程会有和父进程相同数量的线程吗?2.父进程被加锁的互斥锁 fork 后在子进程中是否已经加锁 ?一.什么是线程安全 线程安全即就是…

【数据结构】时间复杂度详解

首先我们要知道学习数据结构时都会讨论到算法,数据结构中的问题多数都有算法解决,两者是你中有我,我中有你的关系,所以在数据结构中的学习中算法也是必不可少的。 为方便阅读,以下为本片目录 目录 1.算法效率 1.1 …

JavaScript的学习理解

文章目录一、JavaScript 对象二、JavaScript 函数三、JavaScript 作用域总结一、JavaScript 对象 JavaScript 对象是拥有属性和方法的数据。 真实生活中的对象,属性和方法 在 JavaScript中,几乎所有的事物都是对象。 在 JavaScript 中,对象…

Spring5学习笔记01

一、课程介绍 Spring是什么呢? 它是一个轻量级的、开源的JavaEE框架,它的出现是为了解决企业繁琐的开发包括复杂代码,它可以用很优雅、很简洁的方式进行实现,也就是说它为了简化企业开发而生,而它在目前的企业中应用…

大规模MySQL运维陷阱之基于MyCat的伪分布式架构

引子 分布式数据库,已经进入了全面快速发展阶段,这种发展,是与时俱进的,与人的需求是分不开的,因为现在信息时代的高速发展,导致数据量和交易量越来越大。这种现象首先导致的就是存储瓶颈,因为…

(排序10)归并排序的外排序应用(文件排序)

TIPS 在一些文件操作函数当中,fputc与fgetc这两个函数都是针对字符的,如果说你需要往文件里面去放入整形啊等等,不是字符的类型,这时候就用fprintf,fscanf在参数里面数据类型控制一下就可以。但是话说回来&#xff0c…

自动化测试怎么学?这绝对是全网最系统的教程

目录 1、什么是自动化测试 2、自动化测试的发展前景怎么样 3、自动化测试难不难? 4、目前市场上自动化测试岗位的薪资是多少? 5、自动化测试学习方法好渠道 6、自动化测试怎么学? 学习基础知识 选择自动化测试框架 开始编写测试脚本 …

用HTTP proxy module配置一个反向代理服务器

反向代理与正向代理 摘抄:https://cloud.tencent.com/developer/article/1418457 正向代理 正向代理(forward proxy):是一个位于客户端和目标服务器之间的服务器(代理服务器),为了从目标服务器取得内容,…