使用pytoch简洁创建隐层,拟合正弦函数,深入理解深度学习是一种高维非线性拟合

网上关于拟合直线和二次曲线的教程已经很多,隐藏层设置差不多1到2层,便可以得到很好的拟合效果。更加复杂的几何函数,需要更多的隐藏层来进行拟合,逐层进行定义必然很繁琐还容易出错。

我们知道深度神经网络的本质是输入端数据和输出端数据的一种高维非线性拟合,如何更好的理解它,下面尝试拟合一个正弦函数,本文可以通过简单设置节点数,实现任意隐藏层数的拟合。
基于pytorch的深度神经网络实战,无论任务多么复杂,都可以将其拆分成必要的几个模块来进行理解。
1)构建数据集,包括输入,对应的标签y
2) 构建神经网络模型,一般基于nn.Module继承一个net类,必须的是__init__函数和forward函数。__init__构造函数包括创建该类是必须的参数,比如输入节点数,隐藏层节点数,输出节点数。forward函数则定义了整个网络的前向传播过程,类似于一个Sequential。
3)实例化上步创建的类
4)定义损失函数(判别准则),比如均方误差,交叉熵等
5)定义优化器(optim:SGD,adam,adadelta等),设置学习率
6)开始训练。开始训练是一个从0到设定的epoch的循环,循环期间,根据loss,不断迭代和更新网络权重参数。训练阶段可以分为几个部分:
1.前向传播,得到out【out = net(x)】
2.根据out和数据的标签,计算loss【loss = loss_func(out, y)】
3.根据optimizer将梯度置为0【optimzer.zero_grad()】
4.损失的反向传播【loss.backward()】
5.optimizer的迭代【optimzer.step()】
无论多么复杂的网络,基于pytorch的深度神经网络都包括6个模块,训练阶段包括5个步骤,本文只通过拟合一个正弦函数来说明加深理解。
一、构建数据集,包括输入,对应的标签y,创建了一个1000个点的数据

def get_fake_data(batch_size=1000):
    x = torch.unsqueeze(torch.linspace(-10,10,batch_size), dim=1)
    y = np.sin(x)
    return x, y

二、构建神经网络模型
为了避免手动输入隐藏层节点和操作的繁琐,使用make_layer来创建一定数量的隐藏层,这里参照了pytorch vgg的构造方法。
①定义创建层的函数(最后一层输出不能激活)

def make_layers(cfg):
    layers = []
    input_dim = cfg[0]
    for v in cfg[1:-1]:
        linear = torch.nn.<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值