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

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


前言

终于到搭建神经网络了,开心吧!本博客会根据生成的数据搭建一个输入层节点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搭建前馈神经网络了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值