pytorch 线性回归总结

news/2024/5/17 3:55:08/文章来源:https://blog.csdn.net/qq_45759229/article/details/130036498

测试1(y=3∗x1−4∗x2y=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):#这里是大写的Moduledef __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()#梯度清0loss.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∗x1−4∗x2y=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):#这里是大写的Moduledef __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()#梯度清0loss.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+4y = 3*x +4y=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 pltx1=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):#这里是大写的Moduledef __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()#梯度清0loss.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+4y = 3*x +4y=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 pltx1=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):#这里是大写的Moduledef __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=0for 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()#梯度清0loss.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∗x1−4∗x2+2.30y=3*x1-4*x2+2.30y=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.30class Net(nn.Module):#这里是大写的Moduledef __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=0for 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()#梯度清0loss.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.luyixian.cn/news_show_283811.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Robocup 仿真2D 学习笔记(四)阵型编辑

一、阵型文件介绍 阵型文件里设置的是球员在比赛中的跑位点 基于helios base的阵型文件,在目录/src/formations-dt中 阵型的调用在/src/strategy.cpp 文件: before-kick-off.conf 是球员上场之后的阵型 (或进球等待开球) no…

049:cesium加载czml文件,显示图形

第049个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载czml文件, 显示图形。这是官网的一个示例,这里转换了处理方式。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共78行)相关API参考:专栏目标示…

暴击一棵树——二叉树入门一(入门基础概念)

目录 1.树的概念 2.二叉树的概念 二叉树(Binary Tree) 满二叉树(Full Binary Tree) 完全二叉树(Complete Binary Tree) 3.堆和二叉树 4、二叉树的结构 1.二叉树的逻辑结构 2.二叉树的物理结构 1.树…

《钢琴调律师 五级》 笔记

声音产生的三个条件:物体振动、媒质传播、人耳接收 复合音:由一些频率不同的简谐成分合成的声音。大多数乐器都是复合音,因此才各有不同的音色特征 纯音:物体做简谐振动所产生的声音 乐音:指有较为明确音调感的声音。噪…

spark第七章:SparkStreaming实例

系列文章目录 系列文章目录 spark第一章:环境安装 spark第二章:sparkcore实例 spark第三章:工程化代码 spark第四章:SparkSQL基本操作 spark第五章:SparkSQL实例 spark第六章:SparkStreaming基本操作 spa…

javaEE+jsp820高校校园设备报修系统dzkfa9程序mysql

1.系统登录:系统登录是用户访问系统的路口,设计了系统登录界面,包括用户名、密码和验证码,然后对登录进来的用户判断身份信息,判断是管理员用户还是普通用户。 2.系统用户管理:不管是…

从C出发 13 --- 多维数组

数组的本质是数据集合,我们在程序里面操作数组,就是在操作数据 数组中的元素能不能是其他程序元素? 这个说法只是表示数组里面的元素是int 类型 而这个数组的类型是 int [5] 由元素类型和数组大小共同决定 int a[10] {0}; // a的类型 : int[10]…

文件小注意

目录 0 前言 1 标识 O_CREAT O_APPEND 2 ftruncate与truncate 3 O_DIRECT与O_DSYNC、O_SYNC 4 open与fopen 5 关于mmap 0 前言 文件操作在软件开发中是很常见的一件事。虽然与它相关的工作看起来不怎么起眼,无非就是通过通过open、read、write、close几个调用…

【MySQL】主从复制过程(实践)

1.安装好2台数据库服务器的系统,然后安装好MySQL软件 [rootjd-mysql ~]# mysql --version mysql Ver 14.14 Distrib 5.7.40, for linux-glibc2.12 (x86_64) using EditLine wrapper[rootjd-mysql-2 ~]# mysql --version …

第03章_用户与权限管理

第03章_用户与权限管理 1. 用户管理 ​ MysQL用户可以分为普通用户和root用户。root用户是超级管理员,拥有所有权限,包括创建用户 、删除用户和修改用户的密码等管理权限;普通用户只拥有被授予的各种权限。 MysQL提供了许多语句用来管理用户账号&#…

认识C++字符串复合类型

目录 前言: 1.数组 1.1C的数组 1.2C数组初始化 *2.字符串 2.1字符串与数组 2.2字符数组的存储 2.3字符串输入cin 2.4cin.getline() 2.5cin.get() 2.6函数重载例子 2.7混合输入数字和字符串 前言: C与C语言在内容上有些是一样的,也…

Zooker配置与测试

目录 1.介绍 2.配置 1.配置准备 2.配置修改 3.测试 1.介绍 2.配置 1.配置准备 zookeeper官网:Apache ZooKeeper (1)安装 JDK (2)拷贝 apache-zookeeper-3.5.7-bin.tar.gz 安装包到software目录下 (3)解…

mysql常用的基础命令

通过学习mysql命令提高数据处理和工作效率 基础命令 1.登录MySQL mysql -u root -p 2.查看当前系统所有数据库 show databases; 3.切换数据库 use 数据库名称 4.查看数据库下的所有表 show tables; 5.查看表结构; desc 表名; 6.创建数据库 crea…

CentOS7的下载、安装和配置(详细图解)

CentOS7安装包的下载 Centos7的安装包可以去官网(https://www.centos.org/)下载,但速度比较慢。 也可以用搜索引擎搜索国内镜像站点的安装包文件与官网同步,下载的速度非常快。 CentOS7软件安装包的分享 百度网盘分享&#xff…

python函数详解_INDEX函数

一. 函数的作用 函数就是将一段具有独立功能的代码块 整合到一个整体并命名,在需要的位置调用这个名称即可完成对应的需求。 函数在开发过程中,可以更高效的实现代码重用。 二. 函数的使用步骤 1. 定义函数 def 函数名(参数):代码1代码2...... 复制 …

usb_cam相机录制rosbag

文章目录运行环境:1.1 usb_cam连接:1.2 usb-cam启动1.2 查看相机话题名称2.1 rosbag录制2.2 播放rosbag运行环境: ubuntu20.04 noetic 杰瑞微通usb_cam(分辨率640x480) 宏基暗影骑士笔记本 1.1 usb_cam连接&#xff…

Golang每日一练(leetDay0030)

目录 88. 合并两个有序数组 Merge Sorted Array 🌟 89. 格雷编码 Gray Code 🌟🌟 90. 子集 II Subsets II 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/…

Linux复习 / 进程控制QA梳理

文章目录前言Q&A进程终止Q:exit和_exit的区别?Q:内核是如何终止进程的?进程等待Q:为什么要等待子进程?Q:如何等待子进程(wait/waitpid的区别)?进程替换Q&…

TCP协议工作机制二(滑动窗口,流量控制,拥塞控制,延时应答,捎带应答等)

目录 滑动窗口 流量控制 拥塞控制 延时应答 捎带应答 面向字节流 异常情况 UDP和TCP对比 滑动窗口 由于TCP是可靠传输,有确认应答,超时重传,连接管理等机制,发送消息时需要等待接收方返回的ack.因此会消耗大量等待ack的时间,我们引入滑动窗口的机制来竭尽可能提高TCP的…

【Linux】环境变量进程虚拟地址空间

环境变量&进程虚拟地址空间环境变量一些常见的环境变量-PATH修改环境变量进程虚拟地址空间环境变量 使用ls man pwd cd echo 这些指令时,不需要加./但是要运行我们自己的可执行程序就需要加上,本质上两个都是指令,为什么执行方法不同&am…