[基于pytorch的mnist识别01]神经网络建立(代码片段)

AIplusX AIplusX     2023-01-09     332

关键词:

写在前面

前面我曾尝试在无框架的情况下进行神经网络的构建和调参,我发现虽然网络构建起来和运行起来都问题不大,但是在调参时就会显现无框架的弊端。经过初步的调参之后,我建立的网络识别准确率只能达到45%,但是我反复演算和查看公式、代码,都没有发现问题,因此调试就十分的困难了。

所以在经过思索和衡量之后,我决定还是采用一个轻量级的工具来帮助我调试神经网络。经过我的对比搜索之后,我决定使用pytorch,因为他兼容numpy且使用部署起来较为简便,便于我将精力投入到神经网络本身的学习,尽量减少环境对我的影响。

今天的工作

今天主要学习了pytorch的基本语法,并且将原来的BPnet.py部分文件进行了基于python的复现,主要是利用类来实现神经网络,这样可以使得代码可读性更高,先放出来看一下:

import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np

#print beta
torch.__version__

#hyperparameters
input_size = 784 #28*28
hidden_size = 16
batch_size = 100
out_put_size = 10 #0~9

#set up NeuralNet
class NeuralNet(nn.Module):
    def __init__(self, input_size, hidden_size, out_put_size):
        super(NeuralNet, self).__init__()
        #recode hyperparameters
        self.input_size = input_size
        self.hidden_size = hidden_size
        self.hidden_layer_size = hidden_layer_size
        self.out_put_size = out_put_size
#       2 hidden_layers
        self.gap0 = nn.Linear(input_size, hidden_size)
        self.gap1 = nn.Linear(hidden_size, hidden_size)
        self.gap2 = nn.Linear(hidden_size, out_put_size)


    def forward(self, x):
        out = self.gap0(x)
        out = torch.relu(out)
        out = self.gap1(out)
        out = torch.rele(out)
        out = self.gap2(out)
        out = torch.sigmoid(out)

        return out
    
# net = NeuralNet(input_size, hidden_size, out_put_size)

基本神经网络的结果还是如下图所示:

可以看到在借助了pytorch框架之后,我们就不需要拘泥于神经网络的层数和隐层内的神经元的数量了,基于pytorch框架的话可以很轻易,很清晰的进行修改,因此我就没有特别的将隐层内的层数和隐层内的神经元数量进行标注。

在这个初始的例子中,我还是沿用了之前的方法,2个隐层,每个隐层都是16个神经元,根据之后神经网络的表现可以灵活优化结构。

其中nn.Linear()可以理解成神经网络的前层和后层之间的矩阵相乘的操作,而且这个函数会记录神经网络前向传递的过程,并且做为parameters参数保存下来。

我们可以用如下语句进行查看:

print(net)
for name,parameters in net.named_parameters():
    print(name,':',parameters.size())

可以得到如下图所示的结果:

查看parameters参数之后可以发现神经网络的每层的参数都记录了下来,这样就可以跟踪神经网络的前向传递操作从而记录得到梯度,最终可以根据这个计算出来的梯度进行参数更新。

明天的工作

1、明天主要是进行MNIST数据的加载,并且将数据转换成Tensor;

2、将变量移动到GPU上从而加快模型训练速度;

[基于pytorch的mnist识别05]总结(代码片段)

写在前面走走停停,我自己做的第一个机器学习的项目:MNIST手写字符集的识别,终于结束了,一路走来也算是踩了大大小小的坑,在这篇文章里做一个总结。模型配置模型总共有4层,输入层有784个神经元... 查看详情

[基于pytorch的mnist识别03]运行模型(代码片段)

写在前面今天调通了pytorch模型,同时进行了简单的模型测试知识点总结1:python忽略某些特定语句的warning:importwarningswithwarnings.catch_warnings():#ignoresomewarningswarnings.simplefilter("ignore")loss=criteri 查看详情

pytorch基于cnn的手写数字识别(在mnist数据集上训练)(代码片段)

最终成果http://pytorch-cnn-mnist.herokuapp.com/GITHUBhttps://github.com/XavierJiezou/pytorch-cnn-mnist本文以最经典的mnist数据集为例,讲述了使用pytorch做机器学习的一整套流程,文中所提到的所有代码都可以到github中查看。项目场景简单的... 查看详情

用pytorch构建基于卷积神经网络的手写数字识别模型(代码片段)

...n.net/topics/613989052目录一、MINST数据集介绍与分析二、卷积神经网络三、基于卷积神经网络的手写数字识别一、MINST数据集介绍与分析        MINST数据库是机器学习领域非常经典的一个数据集,其由Yann提供的手写数字数据... 查看详情

我用pytorch复现了lenet-5神经网络(mnist手写数据集篇)!

...好,我是红色石头!在上一篇文章:这可能是神经网络LeNet-5最详细的解释了!详细介绍了卷积神经网络LeNet-5的理论部分。今天我们将使用Pytorch来实现LeNet-5模型,并用它来解决MNIST数据集的识别。正文开始ÿ... 查看详情

我用pytorch复现了lenet-5神经网络(mnist手写数据集篇)!

...好,我是红色石头!在上一篇文章:这可能是神经网络LeNet-5最详细的解释了!详细介绍了卷积神经网络LeNet-5的理论部分。今天我们将使用Pytorch来实现LeNet-5模型,并用它来解决MNIST数据集的识别。正文开始ÿ... 查看详情

我用pytorch复现了lenet-5神经网络(mnist手写数据集篇)!

...好,我是红色石头!在上一篇文章:这可能是神经网络LeNet-5最详细的解释了!详细介绍了卷积神经网络LeNet-5的理论部分。今天我们将使用Pytorch来实现LeNet-5模型,并用它来解决MNIST数据集的识别。正文开始ÿ... 查看详情

基于pytorch平台实现对mnist数据集的分类分析(前馈神经网络softmax)基础版(代码片段)

基于pytorch平台实现对MNIST数据集的分类分析(前馈神经网络、softmax)基础版文章目录基于pytorch平台实现对MNIST数据集的分类分析(前馈神经网络、softmax)基础版前言一、基于“前馈神经网络”模型,分类分析... 查看详情

pytorch使用mnist数据集实现手写数字识别(代码片段)

...写数字识别是入门必做吧。这里使用pyTorch框架进行简单神经网络的搭建。首先导入需要的包。1importtorch2importtorch.nnasnn3importtorch.utils.dataasData4importtorchvision 接下来需要下载mnist数据集。我们创建train_data。使用torchvision.datasets.MN... 查看详情

[基于pytorch的mnist识别04]模型调试(代码片段)

知识点1:nn.MSELoss(x,y)均方根值函数如果输入的x和y参数的维度不同,维度低的tensor会进行扩张填充,扩充形式如下图所示:因此之后在训练模型的时候要保持输入变量参数一致,养成良好的编程习惯。2&#x... 查看详情

我用pytorch复现了lenet-5神经网络(cifar10数据集篇)!

...好,我是红色石头!在上两篇文章:这可能是神经网络LeNet-5最详细的解释了!我用PyTorch复现了LeNet-5神经网络(MNIST手写数据集篇)!详细介绍了卷积神经网络LeNet-5的理论部分和使用PyTorch复现LeNet-5网... 查看详情

我用pytorch复现了lenet-5神经网络(cifar10数据集篇)!

...好,我是红色石头!在上两篇文章:这可能是神经网络LeNet-5最详细的解释了!我用PyTorch复现了LeNet-5神经网络(MNIST手写数据集篇)!详细介绍了卷积神经网络LeNet-5的理论部分和使用PyTorch复现LeNet-5网... 查看详情

pycharm-mnist手写数字的识别

本文是将PyTorch上的MNIST手写数字的识别、CNN网络在PyCharm上进行展示可以看我这篇博客PyTorch-CNNModel关于MNIST数据集无法下载的问题可以看我另一篇博客PyTorch-MNIST数据集无法下载-采用手动下载的方式在PyCharm中导入PyTorc转载请注明... 查看详情

图像分类基于pytorch搭建lstm实现mnist手写数字体识别(双向lstm,附完整代码和数据集)(代码片段)

...sdn.net/AugustMe/article/details/128969138文章中,我们使用了基于PyTorch搭建LSTM实现MNIST手写数字体识别,LSTM是单向的,现在我们使用双向LSTM试一试效果,和之前的单向LSTM模型稍微有差别,请注意查看代码的变化。1.导入依赖库这些依赖... 查看详情

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

1.导入必备的包1importtorch2importnumpyasnp3fromtorchvision.datasetsimportmnist4fromtorchimportnn5fromtorch.autogradimportVariable6importmatplotlib.pyplotasplt7importtorch.nn.functionalasF8fromtorch.utils.da 查看详情

[pytorch系列-34]:卷积神经网络-搭建lenet-5网络与mnist数据集手写数字识别(代码片段)

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/details/121050469目录前言:LeNet网络详解第1章业务领域分析1.1 步骤1-1:... 查看详情

[pytorch系列-40]:卷积神经网络-模型的恢复/加载-搭建lenet-5网络与mnist数据集手写数字识别(代码片段)

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客本文网址:https://blog.csdn.net/HiWangWenBing/article/details/121132377目录第1章模型的恢复与加载1.1概述 1.2 模型的恢复与加载类型1.... 查看详情

pytorch深度学习实战|用tensorflow训练神经网络

为了更好地理解神经网络如何解决现实世界中的问题,同时也为了熟悉TensorFlow的API,本篇我们将会做一个有关如何训练神经网络的练习,并以此为例,训练一个类似的神经网络。我们即将看到的神经网络,是... 查看详情