pytorch线性回归(笔记一)

 代码部分:

import numpy as np
import torch
import matplotlib.pyplot as plt
from torch import nn,optim
from torch.autograd import Variable

x_data=np.random.rand(100)#数组中加入在[0,1]之间均匀分布的随机样本。构建x的值
noise=np.random.normal(0,0.01,x_data.shape)#生成高斯分布的概率密度随机数
y_data=x_data*0.01+0.2+noise #构建y的值
plt.scatter(x_data,y_data)#装载数据,看看坐标系下的数据分布
plt.show() #看图

#把数据变成俩维度的
x_data=np.reshape(x_data,(-1,1))
y_data=np.reshape(y_data,(-1,1))

#把俩维度的变成一个tensor
x_data=torch.FloatTensor(x_data)
y_data=torch.FloatTensor(y_data)

#tensor变成变量
input=Variable(x_data)#表示输入
target=Variable(y_data)#表示输出

#构建神经网络的模型
class LinearRegression(nn.Module):
    def __init__(self):#定义网络结构
        super(LinearRegression, self).__init__()#父类的初始化
        self.fc=nn.Linear(1,1)#线性回归,表示输入一个神经元,输出一个神经元,全连接层

    def forward(self,x):#定义网络计算,表示前向传递,pytorch默认做了后向传递
        out=self.fc(x)  #表示把x值传给全连接层,返回一个y值,然后return
        return out


#定义模型(实例化模型)
model=LinearRegression()
#定义代价函数(均方差二次函数)
mes_loss =nn.MSELoss()
#定义优化器(随即梯度下降法)
optimizer=optim.SGD(model.parameters(),lr=0.1)#lr表示学习率,model.parameters()表示把参数传递进优化器

#如何查看参数

for name,parameters in model.named_parameters():
    print("name:{},param:{}".format(name,parameters))


for i in range(1001):#训练1001次
    out=model(input)  #把输入传递进去
    #计算loss损失函数
    loss=mes_loss(out,target) #根据输入和输出计算损失
    #梯度清零
    optimizer.zero_grad() #先把梯度清零,防止缓存
    #计算梯度
    loss.backward()  #计算梯度
    #修改权值
    optimizer.step()  #根据梯度,修改w和b的值
    if i%200 == 0:  #每训练200次就打印一次损失函数
        print(i,loss.item())



pytorch线性回归(笔记一) 

F:\开发工具\pythonProject\tools\venv\Scripts\python.exe F:/开发工具/pythonProject/tools/bys/pychartools.py
name:fc.weight,param:Parameter containing:
tensor([[0.9746]], requires_grad=True)
name:fc.bias,param:Parameter containing:
tensor([0.2897], requires_grad=True)

Process finished with exit code 0

fc.bias表示截取和偏置,fc.weight表示斜率

结果:

0 0.8948118686676025
200 0.0001185736691695638
400 0.00010005112562794238
600 0.00010000772454077378
800 0.00010000762267736718
1000 0.00010000763722928241

初始值是0.8948118686676025,经过一次次的训练,斜率约来越小,最后变成0.00010000763722928241

上一篇:导入源码SpringBoot碰到的痛点


下一篇:c#操作access,update语句不执行的解决办法