首页 > 编程知识 正文

一个简单的回归问题的神经网络是什么,神经网络线性回归算法原理

时间:2023-05-06 09:20:19 阅读:239637 作者:886

回归(regression)是监督学习的一种,回归分析的任务是通过训练数据集D学习到一个模型T,使得模型T能够尽量拟合训练数据集D,并且对于新的输入数据x,应用模型T能够得到预测结果f(x)。

回归与分类是监督学习的两种形式,它们的区别在于回归的预测值是一连续的实数,而分类的预测值是离散的类别数据。
或者说回归问题的预测结果是连续的,比如说要预测某一天的气温,那预测出来24小时的温度就是连续的,而分类问题通常用于给事物打上一个标签,比如猫和狗的分类问题。

今天跟着莫烦Python学习搭建了一个简单的回归问题的神经网络

实验的结果如下图所示,通过不断训练模型,最终可以看到红色的曲线拟合数据集的结果,而且损失函数在不断地减小,说明预测值和真实值的误差在不断地减小

建立数据集

# unsqueeze()把一维数据变成二维数据x=torch.unsqueeze(torch.linspace(-1,1,100),dim=1)y=x.pow(2)+0.2*torch.rand(x.size())

建立神经网络

torch中有神经网络(Neural Networks)的包nn,而nn.Module是所有网络层的父类,如果我们要自己实现层,就要继承该类

在本实验中我们构建只有一个隐藏层的神经网络,在初始化时定义层与层间的连接关系为两个nn的线性全连接

Linear的创建传入的两个参数是输入节点数和输出节点数

我们只要在nn.Module的子类中定义forward函数,backward函数就会被自动实现

forward函数

class Net(torch.nn.Module): def __init__(self,n_feature,n_hidden,n_output): super(Net,self).__init__() self.hidden=torch.nn.Linear(n_feature,n_hidden) # 隐藏层线性输出 self.predict=torch.nn.Linear(n_hidden,n_output) # 输出层线性输出 def forward(self,x): # 正向传播输入值,神经网络分析输出值 x=F.relu(self.hidden(x)) #激励函数 x=self.predict(x) #输出值 return xnet=Net(n_feature=1,n_hidden=10,n_output=1)print(net) #打印net的结构

训练网络

# optimizer是训练的工具optimizer=torch.optim.SGD(net.parameters(),lr=0.2) # 传入net的所有参数,学习率loss_func=torch.nn.MSELoss() #真实值和预测值的误差计算公式(均方差)for t in range(200): prediction=net(x) loss=loss_func(prediction,y) optimizer.zero_grad() #清空上一步的残余更新参数值 loss.backward() #误差反向传播,计算参数更新值 optimizer.step() #更新参数

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。