一个简单的回归问题的神经网络

机器学习 专栏收录该内容
9 篇文章 0 订阅

回归(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 x
net=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() #更新参数
  • 2
    点赞
  • 4
    评论
  • 14
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值