用pytorch实现多层感知机(mlp)(全连接神经网络fc)分类mnist手写数字体的识别(代码片段)

yaowuyangwei521 yaowuyangwei521     2023-01-20     310

关键词:

1.导入必备的包

1 import torch 
2 import numpy as np 
3 from torchvision.datasets import mnist
4 from torch import nn
5 from torch.autograd import Variable
6 import matplotlib.pyplot as plt
7 import torch.nn.functional as F
8 from torch.utils.data import DataLoader
9 %matplotlib inline

2.定义mnist数据的格式变换

1 def data_transform(x):
2     x = np.array(x, dtype = float32) / 255
3     x = (x - 0.5) /0.5
4     x = x.reshape((-1, ))
5     x = torch.from_numpy(x)
6     return x

3.下载数据集,定义数据迭代器

1 trainset = mnist.MNIST(./dataset/mnist, train=True, transform=data_transform, download=True)
2 testset = mnist.MNIST(./dataset/mnist, train = False, transform=data_transform, download=True)】
3 train_data = DataLoader(trainset, batch_size=64, shuffle=True)
4 test_data = DataLoader(testset, batch_size=128, shuffle=False)

4.定义全连接神经网络(多层感知机)

 1 class MLP(nn.Module):
 2     def __init__(self):
 3         super(MLP, self).__init__()
 4         self.fc1 = nn.Linear(28*28, 500)
 5         self.fc2 = nn.Linear(500, 250)
 6         self.fc3 = nn.Linear(250, 125)
 7         self.fc4 = nn.Linear(125, 10)
 8         
 9     def forward(self, x):
10         x = F.relu(self.fc1(x))
11         x = F.relu(self.fc2(x))
12         x = F.relu(self.fc3(x))
13         x = self.fc4(x)
14         return x
15 
16 mlp = MLP()

5.定义损失函数和优化器

1 criterion = nn.CrossEntropyLoss()
2 optimizer = torch.optim.SGD(mlp.parameters(), 1e-3)

6.开始训练和测试

 1 losses = []
 2 acces = []
 3 eval_losses = []
 4 eval_acces = []
 5 
 6 for e in range(20):
 7     train_loss = 0
 8     train_acc = 0
 9     mlp.train()
10     for im, label in train_data:
11         im = Variable(im)
12         label = Variable(label)
13         # 前向传播
14         out = mlp(im)
15         loss = criterion(out, label)
16         # 反向传播
17         optimizer.zero_grad()
18         loss.backward()
19         optimizer.step()
20         # 记录误差
21         train_loss += loss.item()
22         # 计算分类的准确率
23         _, pred = out.max(1)
24         num_correct = (pred == label).sum().item()
25         acc = num_correct / im.shape[0]
26         train_acc += acc
27         
28     losses.append(train_loss / len(train_data))
29     acces.append(train_acc / len(train_data))
30     # 在测试集上检验效果
31     eval_loss = 0
32     eval_acc = 0
33     mlp.eval() # 将模型改为预测模式
34     for im, label in test_data:
35         im = Variable(im)
36         label = Variable(label)
37         out = mlp(im)
38         loss = criterion(out, label)
39         # 记录误差
40         eval_loss += loss.item()
41         # 记录准确率
42         _, pred = out.max(1)
43         num_correct = (pred == label).sum().item()
44         acc = num_correct / im.shape[0]
45         eval_acc += acc
46         
47     eval_losses.append(eval_loss / len(test_data))
48     eval_acces.append(eval_acc / len(test_data))
49     print(epoch: , Train Loss: :.6f, Train Acc: :.6f, Eval Loss: :.6f, Eval Acc: :.6f
50           .format(e, train_loss / len(train_data), train_acc / len(train_data), 
51                      eval_loss / len(test_data), eval_acc / len(test_data)))

7.测试结果

epoch: 0, Train Loss: 2.287240, Train Acc: 0.124150, Eval Loss: 2.265074, Eval Acc: 0.237540
epoch: 1, Train Loss: 2.237043, Train Acc: 0.385861, Eval Loss: 2.197773, Eval Acc: 0.524921
epoch: 2, Train Loss: 2.138911, Train Acc: 0.555487, Eval Loss: 2.050214, Eval Acc: 0.554292
epoch: 3, Train Loss: 1.901877, Train Acc: 0.563833, Eval Loss: 1.688784, Eval Acc: 0.592662
epoch: 4, Train Loss: 1.439467, Train Acc: 0.625483, Eval Loss: 1.178063, Eval Acc: 0.704905
epoch: 5, Train Loss: 1.022494, Train Acc: 0.745586, Eval Loss: 0.869467, Eval Acc: 0.778184
epoch: 6, Train Loss: 0.795575, Train Acc: 0.790528, Eval Loss: 0.702586, Eval Acc: 0.808347
epoch: 7, Train Loss: 0.665018, Train Acc: 0.816031, Eval Loss: 0.601074, Eval Acc: 0.831586
epoch: 8, Train Loss: 0.583082, Train Acc: 0.834588, Eval Loss: 0.535897, Eval Acc: 0.843750
epoch: 9, Train Loss: 0.527930, Train Acc: 0.848231, Eval Loss: 0.490443, Eval Acc: 0.857694
epoch: 10, Train Loss: 0.488764, Train Acc: 0.858925, Eval Loss: 0.456138, Eval Acc: 0.866396
epoch: 11, Train Loss: 0.459293, Train Acc: 0.868220, Eval Loss: 0.430784, Eval Acc: 0.873220
epoch: 12, Train Loss: 0.436398, Train Acc: 0.874117, Eval Loss: 0.413343, Eval Acc: 0.875890
epoch: 13, Train Loss: 0.418043, Train Acc: 0.880031, Eval Loss: 0.396967, Eval Acc: 0.880340
epoch: 14, Train Loss: 0.403195, Train Acc: 0.884029, Eval Loss: 0.385431, Eval Acc: 0.885483
epoch: 15, Train Loss: 0.390613, Train Acc: 0.887327, Eval Loss: 0.372552, Eval Acc: 0.889537
epoch: 16, Train Loss: 0.379947, Train Acc: 0.890275, Eval Loss: 0.363168, Eval Acc: 0.891812
epoch: 17, Train Loss: 0.370701, Train Acc: 0.893557, Eval Loss: 0.355597, Eval Acc: 0.894482
epoch: 18, Train Loss: 0.362498, Train Acc: 0.896572, Eval Loss: 0.348329, Eval Acc: 0.897844
epoch: 19, Train Loss: 0.354748, Train Acc: 0.898121, Eval Loss: 0.340272, Eval Acc: 0.899921

8.训练损失和训练精度曲线

1 plt.title(train loss)
2 plt.plot(np.arange(len(losses)), losses)

技术分享图片

1 plt.plot(np.arange(len(acces)), acces)
2 plt.title(train acc)

技术分享图片

 



pytorch(十七):多层感知机全连接曾(代码片段)

一、全连接层用pytorch定义  二、MLP举例    三、具体代码classMLP(nn.Module):def__init__(self):super(MLP,self).__init__()self.model=nn.Sequential(nn.Linear(784,200),nn.ReLU(inplace=True),nn.Li 查看详情

pytorch如何实现多层全连接神经网络

什么是全连接神经网络连接神经网络模型是一种多层感知机(MLP),感知机的原理是寻找类别间最合理、最具有鲁棒性的超平面,最具代表的感知机是SVM支持向量机算法。神经网络同时借鉴了感知机和仿生学,通常来说&... 查看详情

深度学习6.多层感知机及pytorch实现

深度学习6.多层感知机及PyTorch实现​​一、概念​​​​1.MLP​​​​2.前向传播​​​​3.反向传播​​​​4.评估模式与训练模式​​​​二、模型定义​​​​1.加载数据集​​​​2.定义MLP层​​​​3.前向传播​​​​4.... 查看详情

动手学习pytorch——多层感知机(代码片段)

...哪个容易造成梯度消失,使用较多。   多层感知机pytorch实现如下:importtorchfromtorchimportnnfromtorch.nnimportinitimportnumpyasnpimportsyssys.path.append("/home/kesci/input")importd2lzh1981asd2lnum_inputs,num_outputs,num_hiddens=784,10,256net=nn.Sequential(d2l.Flatte... 查看详情

深度学习6.多层感知机及pytorch实现(代码片段)

深度学习6.多层感知机及PyTorch实现一、概念1.MLP2.前向传播3.反向传播4.评估模式与训练模式二、模型定义1.加载数据集2.定义MLP层3.前向传播4.优化器5.反向传播三、训练四、测试与预测五、预测六、完整代码一、概念1.MLP多层感知... 查看详情

深度学习6.多层感知机及pytorch实现(代码片段)

深度学习6.多层感知机及PyTorch实现一、概念1.MLP2.前向传播3.反向传播4.评估模式与训练模式二、模型定义1.加载数据集2.定义MLP层3.前向传播4.优化器5.反向传播三、训练四、测试与预测五、预测六、完整代码一、概念1.MLP多层感知... 查看详情

mlp多层感知器pytorch实现过程(代码片段)

参考博客:https://blog.csdn.net/xholes/article/details/78461164https://www.pianshen.com/article/1392309515/代码github地址使用pytorch框架实现MLP。为了深入了解源码,没有使用pytorch中torch.nn.Module类和其它现有的方法,大部分功 查看详情

深度学习基础--多层感知机(mlp)(代码片段)

...层感知机(MLP)最近在阅读一本书籍–Dive-into-DL-Pytorch(动手学深度学习),链接:https://github.com/newmonkey/Dive-into-DL-PyTorch,自身觉得受益匪浅,在此记录下自己的学习历程。本篇主要记录关于多层... 查看详情

多层感知机(代码片段)

...基本知识使用多层感知机图像分类的从零开始的实现使用pytorch的简洁实现多层感知机的基本知识深度学习主要关注多层模型。在这里,我们将以多层感知机(multilayerperceptron,MLP)为例,介绍多层神经网络的概念。隐藏层下图展... 查看详情

mlp多层感知器pytorch实现过程(代码片段)

...8461164https://www.pianshen.com/article/1392309515/代码github地址使用pytorch框架实现MLP。为了深入了解源码,没有使用pytorch中torch.nn.Module类和其它现有的方法,大部分功能手写实现。data文件夹中是数据集。ReLU_CELF.py是代码,激活... 查看详情

gluon实现多层感知机mlp分类fashionmnist(代码片段)

frommxnetimportgluon,initfrommxnet.gluonimportlossasgloss,nnfrommxnet.gluonimportdataasgdatafrommxnetimportnd,autogradimportgluonbookasgbimportsys#读取数据#读取数据mnist_train=gdata.vision.FashionMNIST(train= 查看详情

第03课:多层感知机在结构化数据中的应用实现

从本节课开始,我们将逐一介绍Deeplearning4j基于主流神经网络结构在分类、回归等机器问题上的实例应用。这一课将介绍多层感知机(MLP)在结构化数据集上构建分类和回归模型的例子。在给出具体的实例之前,先简单介绍下多... 查看详情

神经网络多层感知机的从零开始实现(mlp-scratch)(代码片段)

多层感知机-从零开始实现多层感知机的从零开始实现获取和读取数据定义模型参数定义激活函数定义模型定义损失函数训练模型小结多层感知机的从零开始实现我们已经从上一节里了解了多层感知机的原理。下面,我们一起... 查看详情

mlp多层感知机网络——bpn反向传播神经网络

...反向传播神经网络是对非线性可微分函数进行权值训练的多层网络,是前向神经网络的一种。BP网络主要用于:1)函数逼近与预测分析:用输入矢量和相应的输出矢量训练一个网络,逼近一个函数或预测未知信息;2)模式识别:用... 查看详情

keras多层感知机mlp(代码片段)

  肯定有人要说什么多层感知机,不就是几个隐藏层连接在一起的吗。话是这么说,但是我觉得我们首先要自己承认自己高级,不然怎么去说服(hunong)别人呢fromkeras.modelsimportSequentialfromkeras.layersimportDenseimportnumpyasnp#设置... 查看详情

基于pytorch的mlp(以垃圾邮件分类为例)(代码片段)

本文是《Pytorch深度学习入门与实战》,中国水利水电出版社一书中的例子数据集:链接:https://pan.baidu.com/s/1rODLa65Js4K5rZ1iMDQ2DA提取码:d8fc代码全连接神经网络(Multi-LayerPerception,MLP)或称多层感知机。... 查看详情

第03课:多层感知机在结构化数据中的应用实现

从本节课开始,我们将逐一介绍Deeplearning4j基于主流神经网络结构在分类、回归等机器问题上的实例应用。这一课将介绍多层感知机(MLP)在结构化数据集上构建分类和回归模型的例子。在给出具体的实例之前,先简单介绍下多... 查看详情

pytorch学习笔记——多层感知机的实现(代码片段)

本文预备知识:Pytorch学习笔记(四)——torchvision工具箱目录一、FashionMNIST数据集二、torch.nn2.1nn.Module2.2nn.Sequential2.3查看神经网络的参数三、LossFunction四、torch.optim五、训练与测试附录:完整代码一、FashionMNIST数... 查看详情