• 【深度学习实验】前馈神经网络(一):使用PyTorch构建神经网络的基本步骤


    目录

    一、实验介绍

     二、实验环境

    1. 配置虚拟环境

    2. 库版本介绍

    三、实验内容

    0. 导入库

    1. 定义x,w,b

    2. 计算净活性值z

    3. 实例化线性层并进行前向传播

    4. 打印结果

    5. 代码整合


     

     

     

     

    一、实验介绍

            本实验使用了PyTorch库来构建和操作神经网络模型,主要是关于线性层(Linear Layer)的使用。

     

     二、实验环境

            本系列实验使用了PyTorch深度学习框架,相关操作如下:

    1. 配置虚拟环境

    conda create -n DL python=3.7 
    conda activate DL
    pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
    
    conda install matplotlib
     conda install scikit-learn

    2. 库版本介绍

    软件包本实验版本目前最新版
    matplotlib3.5.33.8.0
    numpy1.21.61.26.0
    python3.7.16 
    scikit-learn0.22.11.3.0
    torch1.8.1+cu1022.0.1
    torchaudio0.8.12.0.2
    torchvision0.9.1+cu1020.15.2

     

    三、实验内容

    ChatGPT:

            前馈神经网络(Feedforward Neural Network)是一种常见的人工神经网络模型,也被称为多层感知器(Multilayer Perceptron,MLP)。它是一种基于前向传播的模型,主要用于解决分类和回归问题。

            前馈神经网络由多个层组成,包括输入层、隐藏层和输出层。它的名称"前馈"源于信号在网络中只能向前流动,即从输入层经过隐藏层最终到达输出层,没有反馈连接。

    以下是前馈神经网络的一般工作原理:

    1. 输入层:接收原始数据或特征向量作为网络的输入,每个输入被表示为网络的一个神经元。每个神经元将输入加权并通过激活函数进行转换,产生一个输出信号。

    2. 隐藏层:前馈神经网络可以包含一个或多个隐藏层,每个隐藏层由多个神经元组成。隐藏层的神经元接收来自上一层的输入,并将加权和经过激活函数转换后的信号传递给下一层。

    3. 输出层:最后一个隐藏层的输出被传递到输出层,输出层通常由一个或多个神经元组成。输出层的神经元根据要解决的问题类型(分类或回归)使用适当的激活函数(如Sigmoid、Softmax等)将最终结果输出。

    4. 前向传播:信号从输入层通过隐藏层传递到输出层的过程称为前向传播。在前向传播过程中,每个神经元将前一层的输出乘以相应的权重,并将结果传递给下一层。这样的计算通过网络中的每一层逐层进行,直到产生最终的输出。

    5. 损失函数和训练:前馈神经网络的训练过程通常涉及定义一个损失函数,用于衡量模型预测输出与真实标签之间的差异。常见的损失函数包括均方误差(Mean Squared Error)和交叉熵(Cross-Entropy)。通过使用反向传播算法(Backpropagation)和优化算法(如梯度下降),网络根据损失函数的梯度进行参数调整,以最小化损失函数的值。

            前馈神经网络的优点包括能够处理复杂的非线性关系,适用于各种问题类型,并且能够通过训练来自动学习特征表示。然而,它也存在一些挑战,如容易过拟合、对大规模数据和高维数据的处理较困难等。为了应对这些挑战,一些改进的网络结构和训练技术被提出,如卷积神经网络(Convolutional Neural Networks)和循环神经网络(Recurrent Neural Networks)等。

    本系列为实验内容,对理论知识不进行详细阐释

    (咳咳,其实是没时间整理,待有缘之时,回来填坑)

    977468b5ae9843c6a88005e792817cb1.png

     

    0. 导入库

    引入了PyTorch库中的相关模块和一些用于绘图和加载数据集的外部库。

    1. import torch
    2. from torch import nn
    3. import torch.nn.functional as F
    4. import matplotlib.pyplot as plt
    5. from sklearn.datasets import load_iris

     

    加载鸢尾花数据集(此处代码未给出具体加载数据集的步骤)。

     

    1. 定义x,w,b

            定义神经网络模型的输入张量x、权重张量w和偏置项张量b:

    1. x = torch.randn((2, 5))
    2. w = torch.randn((5, 1))
    3. b = torch.randn((1, 1))

      

    2. 计算净活性值z

     

    1. z = torch.matmul(x, w) + b
    2. z_2 = x @ w + b

            通过矩阵乘法计算净活性值z,其中x表示输入特征,w表示权重,b表示偏置项。两种写法都是等效的,可以使用`torch.matmul()`函数或`@`运算符进行矩阵乘法操作。

     

    3. 实例化线性层并进行前向传播

    1. net = nn.Linear(5, 1)
    2. z_3 = net(x)

            `nn.Linear()`函数实例化了一个线性层,指定输入维度为5,输出维度为1。然后将输入张量x传递给该线性层进行前向传播计算,得到输出张量z_3。

     

    4. 打印结果

    1. print('output z:', z)
    2. print('shape of z: ', z.shape)
    3. print('output z_2:', z_2)
    4. print('shape of z:', z_2.shape)
    5. print('output z2: ', z_3)
    6. print('shape of z2:', z_3.shape)

            打印计算结果以及张量的形状信息(方便查看和调试)。

    267a89c57f9a4a8aa3191c8e339b5b74.png

     

    5. 代码整合

     

    1. # 导入必要的工具包
    2. import torch
    3. from torch import nn
    4. # x 表示两个含有5个特征的样本,x是一个二维的tensor
    5. x = torch.randn((2, 5))
    6. # w 表示含有5个参数的权重向量,w是一个二维的tensor
    7. w = torch.randn((5, 1))
    8. # 偏置项,b是一个二维的tensor,但b只有一个数值
    9. b = torch.randn((1, 1))
    10. # 矩阵乘法,请注意 x 和 w 的顺序,与 b 相加时使用了广播机制
    11. z = torch.matmul(x, w) + b
    12. # 另一种写法
    13. z_2 = x @ w + b
    14. # 打印结果,z是一个二维的tensor,表示两个样本经过神经元后的各自净活性值
    15. print('output z:', z)
    16. print('shape of z: ', z.shape)
    17. print('output z_2:', z_2)
    18. print('shape of z:', z_2.shape)
    19. # 实例化一个线性层,接受输入维度是5,输出维度是1
    20. net = nn.Linear(5, 1)
    21. z_3 = net(x)
    22. # 打印结果,z2的形状与z一样,含义也与z一样
    23. print('output z2: ', z_3)
    24. print('shape of z2:', z_3.shape)

     

     

     

     

     

     

     

     

  • 相关阅读:
    @EnableAutoConfiguration记录一下
    找链表的交点
    前端设计模式——外观模式
    芯科科技与Arduino携手推动Matter普及化
    webpack构建工具面试题
    【654. 最大二叉树】
    Jenkins+maven+testng+htmlreport单元自动化测试
    OC高仿iOS网易云音乐AFNetworking+SDWebImage+MJRefresh+MVC+MVVM
    使用scala语言编写代码,一键把hive中的DDLsql转化成MySql中的DDLsql
    2023最新SSM计算机毕业设计选题大全(附源码+LW)之java智慧小区综合管理平台q1033
  • 原文地址:https://blog.csdn.net/m0_63834988/article/details/133048625