3-pytorch搭建一个简单的前馈全连接层网络(回归问题)

本文详细介绍了如何使用PyTorch库在Python中构建一个包含输入层、单隐藏层(10节点)和输出层(1节点)的前馈神经网络,包括数据生成、网络结构定义、优化器选择、损失函数应用以及网络训练过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

终于到搭建神经网络了,开心吧!本博客会根据生成的数据搭建一个输入层节点1,单隐藏层(10节点),输出层(1节点)的前馈神经网络来拟合生成的数据。其中隐藏层使用relu激活函数,输出层不使用激活函数。网络结构如下图:
在这里插入图片描述

快速网络搭建

1 导入库

import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt
import numpy as np

2 生成数据集

# 生成数据(fake data)
x = torch.linspace(-1,1,100).reshape(-1,1)
# 加上点噪声
y = x.pow(2) + 0.2*torch.rand(x.shape)

# 可视化一下数据
plt.scatter(x.data.numpy(),y.data.numpy())
plt.show()

输出:在这里插入图片描述

3 网络搭建

class Net(torch.nn.Module):
    def __init__(self,n_features,n_hidden,n_output):
        # 继承原来结构体的全部init属性及方法
        super(Net,self).__init__()
        # 线性层就是全连接层
        self.hidden = torch.nn.Linear(n_features,n_hidden)
        self.predict = torch.nn.Linear(n_hidden,n_output)
        
    def forward(self,x):
        # 重写继承类的向前传播方法,就是在这个里面选择激活函数的
        x = F.relu(self.hidden(x))
        # 回归中输出层一般不用激活函数
        # 例如这里的relu函数如果激活最后一层,小于0的带你全部变成0了,这肯定不是我们想要的
        x = self.predict(x)
        return x

4 传入网络结构、选择优化器、损失函数

net = Net(1,10,1)
print(net)

输出:在这里插入图片描述

optimizer = torch.optim.SGD(net.parameters(),lr=0.5)
loss_func = torch.nn.MSELoss()

5 网络训练及交换演示(画动图)

# 开启matplotlib的交换模式
plt.ion()
for t in range(100):
    # 这一步其实是调用了类里面的 __call__魔术方法,又学到一个魔术方法
    prediction = net(x)
    # pytorch里面大多内置损失函数传参都是(output,label)这种顺序,注意一下
    loss = loss_func(prediction,y)
    # 梯度清零
    optimizer.zero_grad()
    # 误差反向传播,求梯度
    loss.backward()
    # 进行优化器优化
    optimizer.step()
    if t%5 == 0:
        plt.cla()
        plt.scatter(x.data.numpy(),y.data.numpy())
        plt.plot(x.data.numpy(),prediction.data.numpy(),'r-',lw=5)
        plt.text(0.5,0,'Loss=%.4f'%loss.item(),fontdict={'size':20,'color':'red'})
        plt.pause(0.1)
# 关闭matplotlib的交换模式
plt.ioff()
plt.show()
# 有可能因为是在jupter中才输出的不是动画

输出:在这里插入图片描述

6 打印最终模型参数

# 打印训练出的模型的参数
for name, param in net.named_parameters():
    print(name, param.data)

输出:在这里插入图片描述
在这里插入图片描述

总结

恭喜,看到这里相信你已经学会怎么用pytorch搭建前馈神经网络了。

PyTorch中,前馈全连接层是**构建神经网络的基本组件之一**。以下是有关PyTorch前馈全连接层的详细介绍: 1. **定义**:前馈全连接层(Feed-Forward Linear Layer)是由多个神经元组成的层,其中每个神经元都与前一层的所有神经元相连接。在这种结构中,信息从输入层流向隐藏层,最后流向输出层,过程中没有回路,即不包含任何形式的反馈或循环。 2. **创建**:在PyTorch中,可以通过`torch.nn.Linear`类来创建一个全连接层。这个类接受两个参数:输入特征的数量和输出特征的数量。例如,`nn.Linear(10, 5)`会创建一个接受10个输入特征并输出5个特征的全连接层3. **作用**:全连接层的主要作用是进行特征的线性变换。它通过将输入数据与权重矩阵相乘,并添加一个偏置项来进行计算。这种变换可以帮助网络学习输入和输出之间的复杂映射关系。 4. **激活函数**:为了引入非线性特性,通常会在全连接层之后添加激活函数,如ReLU、Sigmoid或Tanh等。这样可以使网络能够捕捉到更加复杂的数据模式。 5. **训练**:在训练过程中,全连接层的权重和偏置会根据反向传播算法和优化器(如SGD、Adam等)来更新,以最小化损失函数,从而提高网络的预测性能。 6. **应用**:前馈全连接层广泛应用于各种类型的神经网络中,无论是用于回归问题还是分类问题,它们都是构建深层网络的基础。 此外,在搭建一个简单前馈全连接层网络时,通常需要定义网络的架构,包括各层的节点数、激活函数类型等,然后通过数据进行训练,最终得到一个可以用于预测或分类的模型。 总的来说,前馈全连接层是神经网络中不可或缺的一部分,它们负责处理信息的传递和转换,是深度学习模型的核心组成部分。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值