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

@TOC


前言

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

file

快速网络搭建

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()

输出:

file

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)

输出:

file

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)
    loss = loss_func(prediction,y)
    # 梯度清零
    optimizer.zero_grad()
    # 误差反向传播,求梯度
    loss.backward()
    # 进行优化器优化
    optimizer.step()
    if 
        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
        plt.pause(0.1)
# 关闭matplotlib的交换模式
plt.ioff()
plt.show()
# 有可能因为是在jupter中才输出的不是动画

输出:

file

6 打印最终模型参数

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

输出:

file

总结

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

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇