首页 > 其他分享 >梯度下降方法,求解问题 最入门思想

梯度下降方法,求解问题 最入门思想

时间:2024-09-11 08:52:49浏览次数:10  
标签:__ 入门 求解 mm 梯度 self torch print def

第一部分:求下面函数取得的最小值时,此时X的值是多少?

何为梯度下降,本质就是从该点切线方向,慢慢走下去。切线方向:就是给定一个很小的增量值,试探一下方向。

 

 1、方向的增量值:

 

2、不断迭代,当增量为很小时,意味着x应该是

 

 1 #超参数
 2 m=0.02
 3 n=0.00000001
 4 #代码函数
 5 def fn(x):
 6     return 1/2*x*x-10*x
 7 
 8 def getdivide(x):
 9     return (fn(x+n)-fn(x))/n
10 
11 
12 def getmixindex(start):
13     x = start
14     while True:
15         y=x-m*getdivide(a)
16         x=y
17         if abs(m*getdivide(x))<n:break
18 
19     return x
20 
21 if __name__=="__main__":
22   print(getmixindex(100))

 

结果为:

 

  

 第二部分:使用pytorch 求f=ax+by 回归问题.

 数据存放为data.csv 使用pandas 读取,转为torch向量

1、处理好DataSet便以训练

2、构建模型

3、训练

 1 import torch
 2 from torch.utils.data import  Dataset,DataLoader
 3 import pandas as pd
 4 
 5 
 6 class MyDataSet(Dataset):
 7     def __init__(self,filename):
 8         datasource = pd.read_csv(filename, header=None)
 9         datasets = datasource.values
10         x_source = torch.Tensor(datasets[:, :2])
11         y_source = torch.Tensor(datasets[:, 3])
12 
13 
14         self.x=x_source
15         self.y=y_source
16     def __getitem__(self, item):
17         return self.x[item],self.y[item]
18     def __len__(self):
19         return len(self.x)
20 
21 
22 
23 data=MyDataSet('data.csv')
24 dataloader=DataLoader(dataset=data,batch_size=4,shuffle=True)
25 
26 
27 class MyNet(torch.nn.Module):
28     def __init__(self):
29         super(MyNet,self).__init__()
30         self.line=torch.nn.Linear(2,1,bias=False)
31 
32     def forward(self,x):
33         return self.line(x)
34     def getparam(self):
35         for param in self.parameters():
36             print(param)
37 
38 
39 
40 
41 mm=MyNet()
42 
43 
44 optim=torch.optim.Adam(params=mm.parameters(),lr=0.1)
45 lossfunction=torch.nn.MSELoss(reduction='sum')
46 
47 print("前面结果")
48 mm.train()
49 print('参数',mm.getparam())
50 for j in range(1):
51     sum=0
52 
53     for i,data in enumerate(dataloader):
54 
55         x,y=data
56         pred=mm(x)
57         optim.zero_grad()
58         loss=lossfunction(pred,torch.unsqueeze(y,1))
59         loss.backward()
60         print(optim.param_groups)
61         optim.step()
62         sum+=loss.item()
63         break
64     print(j+1,sum)
65 
66 
67 
68 print("后面结果")
69 mm.eval()
70 print('参数',mm.getparam())

 

 最后显示出

 显然 a=3,b=-2可以满足,跟预先设置基本相同。

 

标签:__,入门,求解,mm,梯度,self,torch,print,def
From: https://www.cnblogs.com/seemenlee/p/18407611

相关文章

  • JMeter性能测试快速入门
    1.安装JmeterJmeter依赖于JDK,所以必须确保当前计算机上已经安装了JDK,并且配置了环境变量。1.1.下载可以ApacheJmeter官网下载,地址:http://jmeter.apache.org/download_jmeter.cgi 1.2.解压因为下载的是zip包,解压缩即可使用,目录结构如下:其中的bin目录就是执行的脚本,其中......
  • C++入门 一(命名空间,缺省参数,超详细!!!)
    文章目录C++与C语言的区别命名空间(Namespace)缺省参数C++与C语言的区别C++在保留了C语言所有特性的基础上增加了面向对象编程的支持,并引入了更多的高级特性和工具来提高代码的可读性、可维护性和可扩展性。而C语言则更加简洁和底层,适用于对性能要求极高或对内存管理......
  • 基于Axis 1.4的Web Service入门
    最近有个客户使用的是Axis1.4创建的WebService,很久没用了,所以整理下这块的知识。基于JDK1.8和EclipseMars开发一个简单的HelloworldWebServicepublicinterfaceHelloService{ Stringhello(Stringname);}publicclassHelloServiceImplimplementsHelloService{......
  • C++入门知识
    命名空间为什么会有命名空间?解决C语言中命名冲突的问题。(std是所有c++库的命名空间)解决方法:采用域作用限定符(::):指定编译器搜索的位置。编译器默认的搜索顺序:先局部再全局。命名空间域大体有4种域:全局域、局部域、命名空间域、类域。命名空间域的特点:1.不会影响生命......
  • 机器学习入门篇
    文章目录什么是机器学习?常见机器学习框架经典算法及使用场景1.监督学习(SupervisedLearning)2.无监督学习(UnsupervisedLearning)3.半监督学习(Semi-SupervisedLearning)4.强化学习(ReinforcementLearning)5.集成学习(EnsembleLearning)6.深度学习(DeepLearning)什......
  • JavaScript语法入门四
    变量变量就是在内存中开辟一块用于存储信息的空间。变量命名1.        变量名称必须仅包含字母,数字,符号 $ 和 _。2.        首字符必须非数字。3.        采用驼峰式命名法(camelCase),就是,单词一个接一个,除了第一个单词,其他的每个单词都以大写字母开头......
  • SRS流媒体服务器从入门到精通(其一,环境搭建)
    欢迎诸位来阅读在下的博文~在这里,在下会不定期发表一些浅薄的知识和经验,望诸位能与在下多多交流,共同努力!江山如画,客心如若,欢迎到访,一展风采文章目录一、SRS简介二、SRS的应用场景三、环境搭建四、推流和拉流使用ffmepg推流和拉流使用OBS推流(推荐)五、补充一、SR......
  • 【Python篇】matplotlib超详细教程-由入门到精通(下篇)
    文章目录前言第六部分:保存与导出图表6.1保存为图片文件示例:保存图表为PNG文件解释:关键点:6.2保存为高分辨率图片示例:保存为高分辨率图片解释:6.3保存为不同文件格式示例:保存为不同文件格式解释:6.4调整图表的保存尺寸示例:设置图片尺寸并保存解释:6.5解决中文乱码......
  • Unity碰撞入门笔记
    Collider和Collider碰撞条件layer间可碰撞。其中之一为刚体。碰撞函数进入碰撞:OnCollisionEnter(Collisioninfo)碰撞中:OnCollisionStay(Collisioninfo)碰撞离开:OnCollisionExit(Collisioninfo)trigger物体作为trigger将没有碰撞,作为触发器使用。(例如到达点位刷怪)进......
  • C++入门基础知识61——【关于C++继承】
    成长路上不孤单......