02 简单的多层感知机

02 简单的多层感知机

2.1 多层感知机的定义

理论知识可以参考此篇博客(里面的推导过程十分详细)

https://blog.csdn.net/xholes/article/details/78461164

2.2 多层感知机用Pytorch实现

(1)导入必要的第三方模块

import torch as t
import torch.nn as nn
from torch.autograd import Variable

(2)初始化多层感知机的输入层,隐藏层,输出层

Input_Layer = 5
Hidden_Layer = 20
Output_Layer = 10

(3)随机初始化数据集,并将其展示出来

Input = t.rand(1000,5)
Output = t.rand(1000,10)

print('Input=', Input.data)
print()
print('Output=', Output.data)

结果如下所示:
在这里插入图片描述
(4) 搭建神经网络(必备套路,请记下这个模板)

class MLPNet(nn.Module):
    def __init__(self,input_size,hidden_size,output_size):
        super(MLPNet,self).__init__()
        self.linear1 = t.nn.Linear(input_size,hidden_size)
        self.relu = t.nn.ReLU()
        self.linear2 = t.nn.Linear(hidden_size,output_size)
        
    def forward(self,x):
        z1 = self.linear1(x)
        a1 = self.relu(z1)
        y = self.linear2(a1)
        return y

结构分析:
1) 必须继承nn模块,即class MLPNet(nn.Module)
2) 多层感知机类的构造函数使用super(参考了许多博客都必须写这一个,我摸清楚它的规律,它是这样的一个模板:super(类名self).init())
3) 构造输入层与隐藏层之间的连接权值矩阵(调用Linear类,构造连接权值的矩阵,初始化的参数分别为输入层结点个数以及隐藏层结点个数)
4) 定义激活函数这里使用relu函数
5) 构造隐藏层与输出层之间的连接权值矩阵(调用Linear类,构造连接权值的矩阵,初始化的参数分别为隐藏层结点个数以及输出层结点个数)
6) 前向传播 def forward(self,x):,使用当前神经网络的权值计算出一个预测值

(5) 初始化神经网络,其中包括初始初始的神经网络连接权值参数,定义损失函数,以及选择优化器

# 初始化神经网络

Model = MLPNet(Input_Layer,Hidden_Layer,Output_Layer)


# 定义损失函数

loss_function = nn.MSELoss()

# 定义学习率

learning_rate = 0.01

# 选择优化器
optimizer = t.optim.SGD(Model.parameters(), lr=learning_rate)

(6)训练模型

# 训练模型
import matplotlib.pyplot as plt
import numpy as np

X = []
Y = []

# 设定迭代次数

EPOCHS = 100000

for epoch in range(EPOCHS):
    
    y_pred = Model(Input)
    loss = loss_function(y_pred,Output)
    X.append(epoch)
    Y.append(loss.item())
    if epoch%50==0:
        print('epoch = %d, loss = %.8f'%(epoch,loss.item()))
    
    #清零梯度
    optimizer.zero_grad()
    
    # 计算梯度
    loss.backward()
    
    # 更新梯度
    optimizer.step()
    
plt.plot(X,Y)
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()

结果如图所示:

  1. 部分迭代结果
    在这里插入图片描述
  2. 结果可视化(损失函数结果变化)
    在这里插入图片描述

2.3 参考文献

【1】机器学习 清华大学出版社 周志华
【2】 视频:https://morvanzhou.github.io/tutorials/machine-learning/torch/

猜你喜欢

转载自blog.csdn.net/weixin_44944722/article/details/105717708